Example #1
0
        public Server(int expectedNumberOfConnections, int receiveBufferSize)
        {
            _listeningSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            _expectedNumberOfConnections = expectedNumberOfConnections;
            _receiveBufferSize = receiveBufferSize;
            _bufferManager = new BufferManager(receiveBufferSize * expectedNumberOfConnections * OpsToPreAlloc, receiveBufferSize, true);
            _bufferManager.InitBuffer();

            _acceptEvtArgsPool = new ThreadSafePool<SocketAsyncEventArgs>(10);
            _readWriteEvtArgsPool = new ThreadSafePool<SocketAsyncEventArgs>(expectedNumberOfConnections);

            for (int i = 0; i < _expectedNumberOfConnections; i++)
            {
                SocketAsyncEventArgs readWriteEvtArg = new SocketAsyncEventArgs();
                _bufferManager.SetBuffer(readWriteEvtArg);
                readWriteEvtArg.Completed += IOCompleted;
                _readWriteEvtArgsPool.Push(readWriteEvtArg);
            }

            for (int i = 0; i < 10; i++)
            {
                SocketAsyncEventArgs acceptEvtArg = new SocketAsyncEventArgs();
                acceptEvtArg.Completed += AcceptCompleted;
                _acceptEvtArgsPool.Push(acceptEvtArg);
            }
        }
Example #2
0
 public BufferManager(int totalBytes, int bufferSize, bool autoGrowth)
 {
     _totalBytes = totalBytes;
     _currentIndex = 0;
     _bufferSize = bufferSize;
     _freeIndexesPool = new ThreadSafePool<int>(totalBytes / bufferSize);
     _autogrowth = autoGrowth;
 }
Example #3
0
    public static PacketObject Create(Type type = null)
    {
        var hash = type.GetHashCode();
        var p    = m_pool.Get(hash);

        if (p == null)
        {
            p = new ThreadSafePool <PacketObject>(MAX_POOL_SIZE, type); m_pool.Add(hash, p);
        }

        var packet = p.Pop();

        packet.destroyed         = false;
        packet.dontDestroyOnSend = false;
        packet.dontDestroyOnRecv = false;

        return(packet);
    }
Example #4
0
    public static T Create <T>() where T : PacketObject
    {
        var t    = typeof(T);
        var hash = t.GetHashCode();
        var p    = m_pool.Get(hash);

        if (p == null)
        {
            p = new ThreadSafePool <PacketObject>(MAX_POOL_SIZE, t); m_pool.Add(hash, p);
        }

        var packet = (T)p.Pop();

        packet.destroyed         = false;
        packet.dontDestroyOnSend = false;
        packet.dontDestroyOnRecv = false;

        return(packet);
    }
Example #5
0
        public static void Init(int count, int blocksize, bool autoGrowth)
        {
            _autoGrowth = autoGrowth;
            bufferStack = new ThreadSafePool<SafeBuffer>(count);

            for (int i = 0; i < count; i++)
            {
                byte[] buf = new byte[blocksize];
                bufferStack.Push(new SafeBuffer(buf));
            }
        }