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); } } }
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); } }