コード例 #1
0
        public ConnectionWorkersPool(
            uint numbersOfBuffers, uint buffersSize, Action <object, SocketAsyncEventArgs> ioCompleted,
            IRequestProcessorFactory requestProcessorFactory)
        {
            _buffersSize       = buffersSize;
            _numbersOfBuffers  = numbersOfBuffers;
            _connectionWorkers = new ConcurrentStack <ConnectionWorker>();

            for (var i = 0; i < numbersOfBuffers; i++)
            {
                var buffer = new byte[buffersSize];
                for (var j = 0; j < buffer.Length; j++)
                {
                    buffer[j] = (byte)j;
                }
                var connectionWorker = new ConnectionWorker
                {
                    RequestProcessor = requestProcessorFactory.GetRequestProcessor()
                };
                var readWriteAsync = new SocketAsyncEventArgs {
                    UserToken = connectionWorker
                };
                connectionWorker.SocketAsyncEventArgs = readWriteAsync;
                readWriteAsync.Completed += new EventHandler <SocketAsyncEventArgs>(ioCompleted);
                _connectionWorkers.Push(connectionWorker);
            }
        }
コード例 #2
0
        public void Push(ConnectionWorker connectionWorker)
        {
            connectionWorker.AcceptSocket = null;
            connectionWorker.SocketAsyncEventArgs.SetBuffer(
                connectionWorker.SocketAsyncEventArgs.Buffer, 0, (int)BuffersSize);

            _connectionWorkers.Push(connectionWorker);
        }
コード例 #3
0
        public ConnectionWorkersPool(
            uint numbersOfBuffers, uint buffersSize, Action<object, SocketAsyncEventArgs> ioCompleted, 
            IRequestProcessorFactory requestProcessorFactory)
        {
            _buffersSize = buffersSize;
            _numbersOfBuffers = numbersOfBuffers;
            _connectionWorkers = new ConcurrentStack<ConnectionWorker>();

            for (var i = 0; i < numbersOfBuffers; i++)
            {
                var buffer = new byte[buffersSize];
                for (var j = 0; j < buffer.Length; j++)
                {
                    buffer[j] = (byte)j;
                }
                var connectionWorker = new ConnectionWorker
                {
                    RequestProcessor = requestProcessorFactory.GetRequestProcessor()
                };
                var readWriteAsync = new SocketAsyncEventArgs {UserToken = connectionWorker};
                connectionWorker.SocketAsyncEventArgs = readWriteAsync;
                readWriteAsync.Completed += new EventHandler<SocketAsyncEventArgs>(ioCompleted);
                _connectionWorkers.Push(connectionWorker);
            }
        }
コード例 #4
0
 public bool TryPop(out ConnectionWorker connectionWorker)
 {
     return _connectionWorkers.TryPop(out connectionWorker);
 }
コード例 #5
0
        public void Push(ConnectionWorker connectionWorker)
        {
            connectionWorker.AcceptSocket = null;
            connectionWorker.SocketAsyncEventArgs.SetBuffer(
                connectionWorker.SocketAsyncEventArgs.Buffer, 0, (int)BuffersSize);

            _connectionWorkers.Push(connectionWorker);
        }
コード例 #6
0
 public bool TryPop(out ConnectionWorker connectionWorker)
 {
     return(_connectionWorkers.TryPop(out connectionWorker));
 }