예제 #1
0
 public AsyncSocketSession(Socket client, SocketAsyncEventArgsProxy socketAsyncProxy, bool isReset)
     : base(client)
 {
     m_AsyncSender    = new AsyncSocketSender(client);
     SocketAsyncProxy = socketAsyncProxy;
     m_IsReset        = isReset;
 }
예제 #2
0
 public AsyncSocketSession(Socket client, SocketAsyncEventArgsProxy socketAsyncProxy, bool isReset)
     : base(client)
 {
     SocketAsyncProxy = socketAsyncProxy;
     m_OrigOffset     = socketAsyncProxy.SocketEventArgs.Offset;
     m_IsReset        = isReset;
 }
 /// <summary>
 /// Add a SocketAsyncEventArg instance to the pool
 /// </summary>
 /// <param name="item">The SocketAsyncEventArgs instance to add to the pool</param>
 public void Push(SocketAsyncEventArgsProxy item)
 {
     if (item == null)
     {
         throw new ArgumentNullException("Items added to a SocketAsyncEventArgsPool cannot be null");
     }
     lock (m_pool)
     {
         item.Socket = null;
         m_pool.Push(item);
     }
 }
예제 #4
0
        public AsyncStreamSocketSession(Socket client, SslProtocols security, SocketAsyncEventArgsProxy socketAsyncProxy, bool isReset)
            : base(client)
        {
            SecureProtocol   = security;
            SocketAsyncProxy = socketAsyncProxy;
            var e = socketAsyncProxy.SocketEventArgs;

            m_ReadBuffer = e.Buffer;
            m_Offset     = e.Offset;
            m_Length     = e.Count;

            m_IsReset = isReset;
        }
예제 #5
0
        void AceptNewClient(SocketAsyncEventArgs e)
        {
            if (e.SocketError != SocketError.Success)
            {
                m_MaxConnectionSemaphore.Release();
                m_TcpClientConnected.Set();
                return;
            }

            var client = e.AcceptSocket;

            m_TcpClientConnected.Set();

            var session = RegisterSession(client, new AsyncSocketSession <TAppSession, TCommandInfo>(client, Protocol.CreateCommandReader(AppServer)));

            if (session != null)
            {
                //Get the socket for the accepted client connection and put it into the
                //ReadEventArg object user token
                //////SocketAsyncEventArgsProxy socketEventArgsProxy;
                //////if (m_ReadWritePool.TryPop(out socketEventArgsProxy))
                //////{
                //////    session.SocketAsyncProxy = socketEventArgsProxy;
                //////    session.Closed += new EventHandler<SocketSessionClosedEventArgs>(session_Closed);
                //////    session.Start();
                //////    return;
                //////}
                SocketAsyncEventArgsProxy socketEventArgsProxy = m_ReadWritePool.Pop().Value;
                session.SocketAsyncProxy = socketEventArgsProxy;
                session.Closed          += new EventHandler <SocketSessionClosedEventArgs>(session_Closed);
                session.Start();
                return;

                AppServer.Logger.LogError("There is no enough buffer block to arrange to new accepted client!");
            }

            Async.Run(() => client.SafeCloseClientSocket(AppServer.Logger));
            ////////SmartThreadPool smartThreadPool = new SmartThreadPool();
            ////////IWorkItemResult wir1 = smartThreadPool.QueueWorkItem(() => {
            ////////    client.SafeCloseClientSocket(AppServer.Logger);
            ////////});
            ////////bool success = SmartThreadPool.WaitAll(new IWorkItemResult[] { wir1 });
            //////////if (success)  result1 = (int)wir1.Result;
            ////////smartThreadPool.Shutdown();

            m_MaxConnectionSemaphore.Release();
        }
예제 #6
0
        void AceptNewClient(SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                //Get the socket for the accepted client connection and put it into the
                //ReadEventArg object user token
                SocketAsyncEventArgsProxy socketEventArgsProxy = m_ReadWritePool.Pop();
                socketEventArgsProxy.Socket = e.AcceptSocket;

                TSocketSession session = RegisterSession(e.AcceptSocket);
                session.SocketAsyncProxy = socketEventArgsProxy;
                session.Closed          += new EventHandler <SocketSessionClosedEventArgs>(session_Closed);

                m_TcpClientConnected.Set();
                session.Start();
            }
            else
            {
                m_TcpClientConnected.Set();
            }
        }
예제 #7
0
 public AsyncSocketSession(Socket client, SocketAsyncEventArgsProxy socketAsyncProxy)
     : this(client, socketAsyncProxy, false)
 {
 }
예제 #8
0
 public AsyncStreamSocketSession(Socket client, SslProtocols security, SocketAsyncEventArgsProxy socketAsyncProxy)
     : this(client, security, socketAsyncProxy, false)
 {
 }