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 ToParameter(TenCode ten, ElevenCode eleven) { TmParameter parameter = new TmParameter(); parameter.TenCode = ten; parameter.ElevenCode = eleven; return(parameter); }
public static T GetValue <T>(TmParameter parameter, string key) { object obj = null; parameter.Parameters.TryGetValue(key, out obj); T tp = (T)obj; return(tp); }
public static TmParameter ToParameter <T>(TenCode ten, ElevenCode eleven, string key, T value) { TmParameter parameter = new TmParameter(); parameter.TenCode = ten; parameter.ElevenCode = eleven; parameter.Parameters.Add(key, value); return(parameter); }
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 AddParameter <T>(TmParameter parameter, string key, T value) { object obj; bool yes = parameter.Parameters.TryGetValue(key, out obj); if (yes) { parameter.Parameters.Remove(key); } parameter.Parameters.Add(key, value); }
public static T GetJsonValue <T>(TmParameter parameter, string key) { object obj = null; parameter.Parameters.TryGetValue(key, out obj); string json = (string)obj; //Json.NET反序列化 T t = JsonConvert.DeserializeObject <T>(json); return(t); }
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); }
public override void OnTransferParameter(object obj, TmParameter parameter) { ///将字符串string,用json反序列化转换成MvcParameter参数 parameter.Keys.Add(this.EcsId); if (parameter.TenCode == TenCode.EessionCD) { this.GetComponent <TmCoolDown>().CdCount = 0; } else { ///将MvcParameter参数列队 TmTcpSocket.Instance.RecvParameters.Enqueue(parameter); } }
void CheckSession(TmEntity entity) { TmCoolDown cd = entity.GetComponent <TmCoolDown>(); if (!cd.Counting) { entity.Dispose(); //TmTcpSocket.Instance.StartConnect(); } else { //发送心跳检测(并等待签到,签到入口在TmTcpSession里,双向发向即:客户端向服务端发送,服务端向客户端发送) TmParameter mvc = TmParameterTool.ToParameter(TenCode.EessionCD, ElevenCode.Login); mvc.Keys.Add(entity.EcsId); TmTcpSocket.Instance.Send(mvc); } Console.WriteLine(TmTimerTool.CurrentTime() + " CdCount:{0}-{1} ", cd.CdCount, cd.MaxCdCount); //Debug.Log(TmTimerTool.CurrentTime() + " CdCount:" + cd.CdCount + "-" + cd.MaxCdCount); }
public virtual void OnTransferParameter(object sender, TmParameter parameter) { }