public bool ProcessAndAddMessageToQueue(byte[] RecvBytes, TcpClient Client) { bool Re = false; bool CheckData = false; TcpMeasType MeasType = TcpMeasType.MEAS_TYPE_NONE; int MeasCode = 0; //根据制定的协议校验数据 //.......... CheckData = true; //分析数据,把数据添加到队列m_TcpMeas if (CheckData) { TcpMeas TempMeas = new TcpMeas(); TempMeas.Client = Client; TempMeas.MeasType = MeasType; TempMeas.MeasCode = MeasCode; TempMeas.Param = System.Text.Encoding.ASCII.GetBytes("Just for test !"); if (TempMeas != null) { m_RecvMeasQueue.Enqueue(TempMeas); } Re = true; } return(Re); }
public void TcpProcessClientMeasThreadFunc() { while (true) { if (!SystemRunning) { break; } if (m_MyTcpClient != null) { try { lock (this) { //异步的方式处理所有消息 while (m_MyTcpClient.m_RecvMeasQueue.Count > 0) { TcpMeas meas = m_MyTcpClient.m_RecvMeasQueue.Dequeue(); m_SyncContext.Post(ProcessClientMeassage, meas); } } } catch (System.Exception ex) { MessageBox.Show(ex.Message); } } } }
/*采用SynchronizationContext方法*****************************************/ private void ProcessClientMeassage(object Meassage) { TcpMeas meas = (TcpMeas)Meassage; switch (meas.MeasType) { case TcpMeasType.MEAS_TYPE_ARM: break; default: break; } }
/*采用SynchronizationContext方法*****************************************/ private void ProcessServerMeassage(object Meassage) { TcpMeas meas = (TcpMeas)Meassage; if (meas != null) { switch (meas.MeasType) { case TcpMeasType.MEAS_TYPE_MIS: break; case TcpMeasType.MEAS_TYPE_PLC: break; default: break; } } Debug.WriteLine(Encoding.ASCII.GetString(meas.Param, 0, meas.Param.Length)); }