Пример #1
0
        void ProcessReceive(SocketAsyncEventArgs e)
        {
            ReceiveEventArgs eventArgs = (ReceiveEventArgs)e;
            UserTokenSession UserToken = (UserTokenSession)eventArgs.UserToken;

            if (eventArgs.SocketError == SocketError.Success && eventArgs.BytesTransferred > 0)
            {
                //解码回调
                eventArgs.Decode((bytes) => OnCallBack?.Invoke(UserToken, bytes));

                //继续接收消息
                if (UserToken.Channel != null &&
                    !UserToken.Channel.ReceiveAsync(e))
                {
                    //此次接收没有接收完毕 递归接收
                    ProcessReceive(e);
                }
            }
        }
Пример #2
0
        void ProcessReceive(SocketAsyncEventArgs e)
        {
            ReceiveEventArgs eventArgs = (ReceiveEventArgs)e;
            UserTokenSession UserToken = (UserTokenSession)eventArgs.UserToken;

            if (eventArgs.SocketError == SocketError.Success && eventArgs.BytesTransferred > 0)
            {
                //解码回调
                eventArgs.Decode((packet) =>
                {
                    if (packet.Mode == MessageMode.MessageShort ||
                        packet.Mode == MessageMode.MessageInt)
                    {
                        OnReceive?.Invoke(UserToken, packet);
                    }
                });

                //释放行为接套字的连接(此步骤无意义,只是以防万一)
                eventArgs.AcceptSocket = null;

                //继续接收消息
                if (!UserToken.Channel.ReceiveAsync(e))
                {
                    //此次接收没有接收完毕 递归接收
                    ProcessReceive(e);
                }
            }
            else
            {
                //客户端正常走这步
                OnExit?.Invoke(UserToken);
                //清理连接接套字
                UserToken.Clear();
                //推回接套字池
                ShakeHandEventPool.Push(UserToken.ShakeHandEvent);
            }
        }
Пример #3
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="ReceiveEventArgs">接收使用的接套字</param>
 /// <param name="SendEventArgs">发送使用的接套字</param>
 internal ShakeHandEventArgs(ReceiveEventArgs ReceiveEventArgs, SendEventArgs SendEventArgs)
 {
     this.ReceiveEventArgs = ReceiveEventArgs;
     this.SendEventArgs    = SendEventArgs;
 }