Пример #1
0
        private void InitSocketAsyncPool()
        {
            int netReceiveBufferSize = ServerConfig.NetReceiveBufferSize;

            if (netReceiveBufferSize <= 0)
            {
                netReceiveBufferSize = 1024;
            }

            _BufferManager = new BufferManager(netReceiveBufferSize * ServerConfig.MaxConnects, netReceiveBufferSize);

            try
            {
                _BufferManager.InitBuffer();
            }
            catch (Exception ex)
            {
                Logger.Error(true, "", ex);
                throw;
            }

            _SocketAsyncPool = new SocketAsyncEventArgsProxyPool();

            SocketAsyncEventArgsEx socketEventArg;

            for (int i = 0; i < ServerConfig.MaxConnects; i++)
            {
                socketEventArg = new SocketAsyncEventArgsEx();
                _BufferManager.SetBuffer(socketEventArg);
                socketEventArg.Initialize();//初始化缓存接口
                _SocketAsyncPool.Push(new SocketAsyncEventArgsProxy(socketEventArg));
            }
        }
Пример #2
0
        public override void Stop()
        {
            if (_SocketConnector != null)
            {
                _SocketConnector.NewClientConnected -= tcpSocketListener_NewClientAccepted;
                _SocketConnector.Stop();
            }

            if (_Listeners != null && _Listeners.Count > 0)
            {
                foreach (ISocketListener socketListener in _Listeners)
                {
                    socketListener.Stop();
                    socketListener.NewClientAccepted -= tcpSocketListener_NewClientAccepted;
                    socketListener.Error             -= tcpSocketListener_Error;
                    socketListener.Stopped           -= tcpSocketListener_Stopped;
                }
                _Listeners.Clear();
                _Listeners = null;
            }

            if (_SocketAsyncPool != null)
            {
                _SocketAsyncPool.Clear();
                _SocketAsyncPool = null;
            }

            _BufferManager = null;

            base.Stop();
        }