コード例 #1
0
ファイル: ITCPlayer.cs プロジェクト: tomzhu1024/ITC-Project
        private void ItcClean(string msg)
        {
            try
            {
                MessageComing?.Invoke(msg, true);

                if (uhat != null)
                {
                    uhat.Stop();
                }

                if (iTcpClient != null)
                {
                    if (iNetworkStream != null)
                    {
                        //set session stat to 0
                        byte[] sendBytes = Encoding.Default.GetBytes("session set " + sessionId + "\tSTAT=0");
                        iNetworkStream.Write(sendBytes, 0, sendBytes.Length);
                        iNetworkStream.Flush();
                        byte[] recvBytes    = new byte[iTcpClient.ReceiveBufferSize];
                        int    numBytesRecv = iNetworkStream.Read(recvBytes, 0, iTcpClient.ReceiveBufferSize);
                        string recvStr      = Encoding.Default.GetString(recvBytes, 0, numBytesRecv);

                        //remove session
                        sendBytes = Encoding.Default.GetBytes("session rm " + sessionId);
                        iNetworkStream.Write(sendBytes, 0, sendBytes.Length);
                        iNetworkStream.Flush();
                        recvBytes    = new byte[iTcpClient.ReceiveBufferSize];
                        numBytesRecv = iNetworkStream.Read(recvBytes, 0, iTcpClient.ReceiveBufferSize);
                        recvStr      = Encoding.Default.GetString(recvBytes, 0, numBytesRecv);

                        //quit
                        sendBytes = Encoding.Default.GetBytes("quit");
                        iNetworkStream.Write(sendBytes, 0, sendBytes.Length);
                        iNetworkStream.Flush();

                        iTcpClient.Close();
                        iNetworkStream.Close();
                    }
                    else
                    {
                        iTcpClient.Close();
                    }
                }

                if (iFileStream != null)
                {
                    iFileStream.Close();
                }
                if (iUdpClient != null)
                {
                    iUdpClient.Close();
                }
            }
            catch { }
        }
コード例 #2
0
ファイル: ITCPlayer.cs プロジェクト: tomzhu1024/ITC-Project
        private void ItcPrepare()
        {
            try
            {
                //initiate the tcp connection
                iTcpClient                  = new TcpClient(_ipAddr, 8000);
                iNetworkStream              = iTcpClient.GetStream();
                iNetworkStream.ReadTimeout  = 1000;
                iNetworkStream.WriteTimeout = 1000;
                iFileStream                 = new FileStream(_filePath, FileMode.Open, FileAccess.Read);
                iUdpClient                  = new UdpClient(_ipAddr, 15001);

                AnalyzeMp3File(ref iFileStream, out frameSize, out int frameLength);
                if (frameSize < 1 || frameLength < 1)
                {
                    throw new Exception("Invalid mp3 file.");
                }

                string recvStr = "";
                recvStr = TcpRequest("logon 0\t" + _username + Convert.ToChar("\t") + _password);
                if (recvStr != "000 1\n" && recvStr != "000 0\n")
                {
                    throw new Exception("Authentication failed.");
                }

                //get service stat
                recvStr = TcpRequest("service stat");
                if (recvStr != "000 1\n" && recvStr != "000 0\n")
                {
                    throw new Exception("Unknown service status.");
                }

                //create an session
                recvStr = TcpRequest("session new test\t65794\t400\t1");
                //000 XXXX\n
                if (!recvStr.StartsWith("000 ") || !recvStr.EndsWith("\n"))
                {
                    throw new Exception("Request session id failed.");
                }
                sessionId = recvStr.Split(new char[] { Convert.ToChar(" "), Convert.ToChar("\n") })[1];
                Debug.Print("Session ID = " + sessionId);

                //add _terminals to the session
                recvStr = TcpRequest("session add_term " + sessionId + "," + _terminals);
                if (recvStr != "000 \n")
                {
                    throw new Exception("Unexpected reply while adding _terminals.");
                }

                //set the session stat to 1
                recvStr = TcpRequest("session set " + sessionId + "\tSTAT=1");
                if (recvStr != "000 \n")
                {
                    throw new Exception("Unexpected reply while enabling session.");
                }

                //set the _volume of session
                recvStr = TcpRequest("session playvol " + sessionId + "," + _volume.ToString() + ",");
                if (recvStr != "000 \n")
                {
                    throw new Exception("Unexpected reply while setting _volume.");
                }

                InitUdpBuffHead(sessionId);

                //set up udp timer
                uhat = new UltraHighAccurateTimer
                {
                    Interval = frameLength
                };
                uhat.tick += UdpClock_Elapsed;
                uhat.Start();

                MessageComing?.Invoke("OK: Playing...", false);
            }
            catch (SocketException)
            {
                ItcClean("Not Ready: Connection error.");
            }
            catch (Exception ex)
            {
                ItcClean("Not Ready: " + ex.Message);
            }
        }