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 { } }
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); } }