private void OnIOCompleted(object sender, SocketAsyncEventArgs asyncEventArgs) { AsyncUserToken userToken = asyncEventArgs.UserToken as AsyncUserToken; userToken.ActiveDateTime = DateTime.Now; try { lock (userToken) { switch (asyncEventArgs.LastOperation) { //case SocketAsyncOperation.Accept: // break; //case SocketAsyncOperation.Connect: // break; //case SocketAsyncOperation.Disconnect: // break; //case SocketAsyncOperation.None: // break; case SocketAsyncOperation.Receive: ProcessReceive(asyncEventArgs); break; //case SocketAsyncOperation.ReceiveFrom: // break; //case SocketAsyncOperation.ReceiveMessageFrom: // break; case SocketAsyncOperation.Send: ProcessSend(asyncEventArgs); break; //case SocketAsyncOperation.SendPackets: // break; //case SocketAsyncOperation.SendTo: // break; default: throw new ArgumentException("the last operation completed on the socket was not a receive or send type"); break; } } } catch (Exception e) { Console.WriteLine("IO_Completed {0} error,message:{1}", userToken.ConnectSocket, e.Message); Console.WriteLine(e.StackTrace); } }
private bool ProcessSend(SocketAsyncEventArgs sendEventArgs) { AsyncUserToken userToken = sendEventArgs.UserToken as AsyncUserToken; if (sendEventArgs.SocketError == SocketError.Success) { if (_userToken.ConnectSocket == null) { Console.WriteLine("ProcessSend userToken. socket is null"); return(false); } else { _userToken.ActiveDateTime = DateTime.Now; return(SendCompleted()); } } else { CloseSocket(); return(false); } }
public void Init() { _userToken = new AsyncUserToken(_receiveBufferSize); _userToken.ReceiveEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnIOCompleted); _userToken.SendEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnIOCompleted); }