internal void ReceiveDataAndEnqueue() { log.Context = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name; log.WriteLog("ReceiveData and Enqueue thread started..."); string s; int iCRat, iCRcount; string [] sa; int length = 0; string sLastErrorMessage = ""; while (!m_bDone) { try { try { m_NetworkStream = m_TCPClient.GetStream(); System.IAsyncResult asr = m_NetworkStream.BeginRead(m_bytesIncomingBuffer,m_iBufferLength,m_iBufferMaxLength - m_iBufferLength,null,null); while (!asr.IsCompleted && !m_bDone) { System.Threading.Thread.Sleep(100); } if (m_bDone) { continue; } //asr.AsyncWaitHandle.WaitOne(); length = m_NetworkStream.EndRead(asr); } catch (System.IO.IOException ioex) { if (null != ioex.InnerException) { if (ioex.InnerException is System.Net.Sockets.SocketException) { int iErrorCode = ((System.Net.Sockets.SocketException)ioex.InnerException).ErrorCode; string sErrorMessage = ((System.Net.Sockets.SocketException)ioex.InnerException).Message; sLastErrorMessage = "ReceiveDataAndEnqueue: Error Code = " + iErrorCode.ToString() + " Description = " + sErrorMessage; } else { sLastErrorMessage = "ReceiveDataAndEnqueue: Unknown Error detected. Description = " + ioex.Message; } log.WriteLog(sLastErrorMessage); } m_bDone = true; m_bConnected = false; } catch (System.Exception ex) { sLastErrorMessage = "ReceiveDataAndEnqueue: Unknown Error detected. Description = " + ex.Message; log.WriteLog(sLastErrorMessage); m_bDone = true; m_bConnected = false; } if(!m_bConnected) { OnConnectionErrorReceived(this,sLastErrorMessage); continue; } if (m_bDone) continue; if (0 == length) { // connection must have been reset m_bDone = true; m_bConnected = false; continue; } m_iBufferLength += length; // find all the messages in the stream iCRcount = 0; for (int i = 0; i < m_iBufferLength; i++) { if (m_bytesIncomingBuffer[i] == 13) iCRcount++; } // for // post all messages from the stream for (int i = 0; i < iCRcount; i++) { s = System.Text.Encoding.ASCII.GetString(m_bytesIncomingBuffer); s = s.Substring(0,m_iBufferLength); iCRat = s.IndexOf((char)13); if (-1 != iCRat) { int iLen; s = s.Substring(0,iCRat); iLen = s.Length + 1; m_iBufferLength -= iLen; m_sLastResponse = s; lock (m_qCommands.SyncRoot) { OysterEncoder.Command cmd; string [] saParams; sa = OysterEncoder.Command.DecodeCommand(System.Text.Encoding.ASCII.GetBytes(s),s.Length); if (sa.Length > 1) { saParams = new string[sa.Length - 1]; Array.Copy(sa,1,saParams,0,sa.Length - 1); cmd = new OysterEncoder.Command(sa[0],saParams); } else { cmd = new OysterEncoder.Command(sa[0],null); } m_qCommands.Enqueue(cmd); } byte [] bytes = new byte[m_iBufferLength]; Array.Copy(m_bytesIncomingBuffer,0,bytes,0,m_iBufferLength); OysterEncoder.CommandEventArgs cea = new OysterEncoder.CommandEventArgs(bytes, ref m_qCommands); OnMessageReceived(cea); m_EventMessageAvailable.Set(); Array.Copy(m_bytesIncomingBuffer,iLen,m_bytesIncomingBuffer,0,m_iBufferLength); Array.Clear(m_bytesIncomingBuffer,m_iBufferLength,m_iBufferMaxLength - m_iBufferLength); } // if } // for } catch (System.Exception ex) { log.WriteLog("Exception: " + ex.Message); } } // while m_EventThreadComplete.Set(); }
public static OysterEncoder.Command CommandFromString(string CommandAsString) { OysterEncoder.Command cmd; string [] sa; string [] saParams; sa = OysterEncoder.Command.DecodeCommand(System.Text.Encoding.ASCII.GetBytes(CommandAsString),CommandAsString.Length); if (sa.Length > 1) { saParams = new string[sa.Length - 1]; Array.Copy(sa,1,saParams,0,sa.Length - 1); cmd = new OysterEncoder.Command(sa[0],saParams); } else { cmd = new OysterEncoder.Command(sa[0],null); } return cmd; }