internal void HandleAccept(SocketAsyncEventArgs AcceptArgs) { if (AcceptArgs.SocketError != SocketError.Success) { HandleBadAccept(AcceptArgs); return; } StartAccept(); SocketAsyncEventArgs ReceiveArgs; if (ReceivePool.TryPop(out ReceiveArgs)) { ReceiveArgs.UserToken = (T)Activator.CreateInstance(typeof(T)); ((T)ReceiveArgs.UserToken).Socket = AcceptArgs.AcceptSocket; ((T)ReceiveArgs.UserToken).ReceiveEventArgs = ReceiveArgs; AcceptArgs.AcceptSocket = null; AcceptPool.Push(AcceptArgs); if (ConnectionAccepted != null) { ConnectionAccepted.Invoke((T)ReceiveArgs.UserToken); } StartReceive(ReceiveArgs); } else { HandleAccept(AcceptArgs); } }
public void HandleAccept(SocketAsyncEventArgs AcceptArgs) { if (AcceptArgs.SocketError != SocketError.Success) { HandleBadAccept(AcceptArgs); return; } StartAccept(); SocketAsyncEventArgs ReceiveArgs; if (ReceivePool.TryPop(out ReceiveArgs)) { Console.WriteLine("Received New Connection!"); // Create Session ReceiveArgs.UserToken = new Session(); ((Session)ReceiveArgs.UserToken).Socket = AcceptArgs.AcceptSocket; ((Session)ReceiveArgs.UserToken).ReceiveEventArgs = ReceiveArgs; // Create User AcceptArgs.AcceptSocket = null; AcceptPool.Push(AcceptArgs); StartReceive(ReceiveArgs); } else { HandleAccept(AcceptArgs); } }