Exemple #1
0
        private void ProcessAccept(SocketAsyncEventArgs acceptEventArgs)
        {
            StartAccept();

            if (acceptEventArgs.SocketError != SocketError.Success)
            {
                HandleBadAccept(acceptEventArgs);
                _maxAcceptOpsEnforcer.Release();
                return;
            }

            SocketAsyncEventArgs recEventArgs;

            if (_poolOfRecEventArgs.TryPop(out recEventArgs))
            {
                ((Session)recEventArgs.UserToken).Socket = acceptEventArgs.AcceptSocket;

                acceptEventArgs.AcceptSocket = null;
                _poolOfAcceptEventArgs.Push(acceptEventArgs);
                _maxAcceptOpsEnforcer.Release();

                Console.WriteLine("<Session " + ((Session)recEventArgs.UserToken).Id + "> is now in use.");

                StartReceive(recEventArgs);
            }
            else
            {
                HandleBadAccept(acceptEventArgs);
                Console.WriteLine("Cannot handle this session, there are no more receive objects available for us.");
            }
        }
Exemple #2
0
        public void SendData(Socket socket, byte[] data)
        {
            _maxSaeaSendEnforcer.Wait();
            SocketAsyncEventArgs sendEventArgs;

            _poolOfSendEventArgs.TryPop(out sendEventArgs);

            var token = (SendDataToken)sendEventArgs.UserToken;

            token.DataToSend = data;
            token.SendBytesRemainingCount = data.Length;

            sendEventArgs.AcceptSocket = socket;
            StartSend(sendEventArgs);

            //Console.WriteLine(PacketFiltered(Encoding.Default.GetString(data)));
        }
Exemple #3
0
        private void StartAccept()
        {
            SocketAsyncEventArgs acceptEventArgs;

            _maxAcceptOpsEnforcer.Wait();

            if (_poolOfAcceptEventArgs.TryPop(out acceptEventArgs))
            {
                _maxConnectionsEnforcer.Wait();
                bool willRaiseEvent = _listenSocket.AcceptAsync(acceptEventArgs);

                if (!willRaiseEvent)
                {
                    ProcessAccept(acceptEventArgs);
                }
            }
        }