Example #1
0
        /// <summary>
        /// 这里是接收到包里面的数据异步处理
        /// </summary>
        /// <param name="ar"></param>
        protected void ReciveData(IAsyncResult ar)
        {
            try
            {
                //结束接收获取长度
                int len = mSocket.EndReceive(ar);

                if (len > 0)
                {
                    mKGNetPacket.PacketIndex += len;

                    //这里是如果接收到的包长和原本获取到的长度小,就是分包了 需要再次进行接收剩下的
                    if (mKGNetPacket.PacketIndex < mKGNetPacket.PacketBuffLength)
                    {
                        mSocket.BeginReceive(mKGNetPacket.PacketBuff, mKGNetPacket.PacketIndex, mKGNetPacket.PacketBuffLength - mKGNetPacket.PacketIndex, SocketFlags.None, ReciveData, null);
                    }
                    //已经接完一组数据了
                    else
                    {
                        //这里就可以进行回调函数了
                        OnReciveData(mKGNetPacket.PacketBuff.DeSerialization <T>());
                        OnReciveDataEvent?.Invoke(mKGNetPacket.PacketBuff.DeSerialization <T>());

                        //开始新一轮的从上往下接收了
                        mKGNetPacket.Refresh();
                        mKGNetPacket.PacketBuff = new byte[4];
                        mSocket.BeginReceive(mKGNetPacket.PacketBuff, 0, 4, SocketFlags.None, ReciveHeadData, null);
                    }
                }
                else
                {
                    Clear();
                }
            }
            catch (Exception e)
            {
                ("ReciveDataError:" + e).KLog(LogLevel.Err);
            }
        }
Example #2
0
 protected virtual void OnReciveData(T data)
 {
     OnReciveDataEvent?.Invoke(data);
     ("接收到了一条消息:" + data).KLog();
 }