예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }