Example #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);
            }
        }
Example #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);
            }
        }
Example #3
0
        internal void StartAccept()
        {
            SocketAsyncEventArgs AcceptArgs;

            if (AcceptPool.TryPop(out AcceptArgs))
            {
                PoolEnforcer.Wait();

                bool Trigger = Socket.AcceptAsync(AcceptArgs);

                if (!Trigger)
                {
                    HandleAccept(AcceptArgs);
                }
            }
        }
Example #4
0
        internal void ConstructPooling(int SupportedAmount)
        {
            this.AcceptPool   = new TPool <SocketAsyncEventArgs>(SupportedAmount);
            this.ReceivePool  = new TPool <SocketAsyncEventArgs>(SupportedAmount);
            this.SendPool     = new TPool <SocketAsyncEventArgs>(SupportedAmount);
            this.PoolEnforcer = new SemaphoreSlim(SupportedAmount, SupportedAmount);
            this.BufferPool   = new BufferPool(SupportedAmount);
            this.BufferPool.PushAllReceivers(this, this.ReceivePool.PushAndHandleAll());
            this.BufferPool.PushAllSenders(this, this.SendPool.PushAndHandleAll());

            foreach (SocketAsyncEventArgs AcceptArgs in AcceptPool.PushAndHandleAll())
            {
                AcceptArgs.Completed += AcceptArgs_Completed;
            }

            StartAccept();
        }
Example #5
0
 internal void HandleBadAccept(SocketAsyncEventArgs AcceptArgs)
 {
     AcceptArgs.AcceptSocket.Close();
     AcceptPool.Push(AcceptArgs);
 }