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);
     }
 }
Exemple #12
0
        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);
        }
Exemple #13
0
 public virtual void OnTransferParameter(object sender, TmParameter parameter)
 {
 }