private void ParsingBytes() { ///将本次要接收的消息头字节数置0 int iBytesHead = 0; ///将本次要剪切的字节数置0 int iBytesBody = 0; try { if (isHead) { ///如果当前需要接收的字节数小于缓存池RecvBuffList,进行下一步操作 if (surHL <= RecvBuffList.Count) { iBytesHead = surHL; surHL = 0; } if (surHL == 0) { isHead = false; isBody = true; ///接收消息体(消息体的长度存储在消息头的0至4索引位置的字节里) byte[] HeadBytes = new byte[iBytesHead]; ///将接收到的字节数的消息头保存到HeadBytes,//减去已经接收到的字节数 CutTo(RecvBuffList, HeadBytes, 0, iBytesHead); int msgLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(HeadBytes, 0)); surBL = msgLength; } } if (isBody) { ///如果当前需要接收的字节数大于0,则循环接收 if (surBL <= RecvBuffList.Count) { iBytesBody = surBL; surBL = 0; ///归零进入下一步操作 } if (surBL == 0) { isBody = false; isHead = true; surHL = 4; ///一个消息包接收完毕,解析消息包 byte[] BodyBytes = new byte[iBytesBody]; CutTo(RecvBuffList, BodyBytes, 0, iBytesBody); ///一个消息包接收完毕,解析消息包 string mvcString = Encoding.UTF8.GetString(BodyBytes, 0, BodyBytes.Length); Console.WriteLine(TmTimerTool.CurrentTime() + " Recv {0} Bytes. ThreadId:{1}", BodyBytes.Length, Thread.CurrentThread.ManagedThreadId); TmParameter parameter = TmJson.ToObject <TmParameter>(mvcString); ///这个方法用来处理参数Mvc,并让结果给客户端响应(当客户端发起请求时调用) OnTransferParameter(this, parameter); } } } catch (Exception ex) { Console.WriteLine(TmTimerTool.CurrentTime() + ex.ToString()); Dispose(); } }
public override void OnSendMvcParameters() { try { while (SendParameters.Count > 0) { TmParameter mvc = SendParameters.Dequeue(); ///用Json将参数(MvcParameter),序列化转换成字符串(string) string mvcJsons = TmJson.ToString <TmParameter>(mvc); if (TClient != null) { TClient.SendString(mvcJsons); } //else //{ // if (IsRunning) // { // IsRunning = false; // StartConnect(); // Console.WriteLine(TmTimerTool.CurrentTime() + " TClient is Null. new TClient() 重新连接。"); // } //} } } catch (Exception ex) { Console.WriteLine(TmTimerTool.CurrentTime() + " SendMvcParameters: " + ex.Message); } }
public override void OnSendMvcParameters() { try { while (SendParameters.Count > 0) { TmParameter mvc = SendParameters.Dequeue(); while (mvc.Keys.Count > 0) { TmTcpSession tpeer; TPeers.TryGetValue(mvc.Keys[0], out tpeer); ///用Json将参数(MvcParameter),序列化转换成字符串(string) string mvcJsons = TmJson.ToString <TmParameter>(mvc); if (tpeer != null) { tpeer.SendString(mvcJsons); } else { Console.WriteLine(TmTimerTool.CurrentTime() + " 没找TPeer,用Key: " + mvc.Keys[0]); break; } mvc.Keys.Remove(mvc.Keys[0]); } } } catch (Exception ex) { Console.WriteLine(TmTimerTool.CurrentTime() + " OnSendMvcParameters: " + ex.Message); } }
public static TmParameter ToJsonParameter <T>(TenCode ten, ElevenCode eleven, string key, T value) { TmParameter parameter = new TmParameter(); string json = TmJson.ToString <T>(value); parameter.TenCode = ten; parameter.ElevenCode = eleven; parameter.Parameters.Add(key, json); return(parameter); }
public static void AddJsonParameter <T>(TmParameter parameter, string key, T value) { object obj; bool yes = parameter.Parameters.TryGetValue(key, out obj); if (yes) { parameter.Parameters.Remove(key); } string json = TmJson.ToString <T>(value); parameter.Parameters.Add(key, json); }