Пример #1
0
        /// <summary>
        /// 初始化频道
        /// </summary>
        public void InitChannel(Socket socket, Type packageCoderType, int packageMaxSize)
        {
            if (packageCoderType == null)
            {
                throw new System.ArgumentException($"packageCoderType is null.");
            }
            if (packageMaxSize <= 0)
            {
                throw new System.ArgumentException($"packageMaxSize is invalid : {packageMaxSize}");
            }

            IOSocket         = socket;
            IOSocket.NoDelay = true;
            _packageMaxSize  = packageMaxSize;

            // 创建编码解码器
            _packageCoder = (NetworkPackageCoder)Activator.CreateInstance(packageCoderType);
            _packageCoder.InitCoder(this, packageMaxSize);

            _receiveArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            _receiveArgs.SetBuffer(_packageCoder.GetReceiveBuffer(), 0, _packageCoder.GetReceiveBufferCapacity());

            _sendArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            _sendArgs.SetBuffer(_packageCoder.GetSendBuffer(), 0, _packageCoder.GetSendBufferCapacity());
        }
Пример #2
0
        /// <summary>
        /// 初始化频道
        /// </summary>
        public void InitChannel(Socket socket, Type packageCoderType, int packageBodyMaxSize)
        {
            if (packageCoderType == null)
            {
                throw new System.ArgumentException($"packageCoderType is null.");
            }
            if (packageBodyMaxSize <= 0)
            {
                throw new System.ArgumentException($"packageMaxSize is invalid : {packageBodyMaxSize}");
            }

            _socket         = socket;
            _socket.NoDelay = true;

            // 创建编码解码器
            _packageCoder = (NetworkPackageCoder)Activator.CreateInstance(packageCoderType);
            _packageCoder.InitCoder(this, packageBodyMaxSize);
            _packageMaxSize = packageBodyMaxSize + _packageCoder.GetPackageHeaderSize();

            // 创建字节缓冲类
            // 注意:字节缓冲区长度,推荐4倍最大包体长度
            int byteBufferSize = _packageMaxSize * 4;
            int tempBufferSize = _packageMaxSize * 2;

            _sendBuffer    = new ByteBuffer(byteBufferSize);
            _receiveBuffer = new ByteBuffer(byteBufferSize);
            _tempBuffer    = new byte[tempBufferSize];

            // 创建IOCP接收类
            _receiveArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            _receiveArgs.SetBuffer(_tempBuffer, 0, _tempBuffer.Length);

            // 创建IOCP发送类
            _sendArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            _sendArgs.SetBuffer(_sendBuffer.GetBuffer(), 0, _sendBuffer.Capacity);

            // 请求操作
            bool willRaiseEvent = _socket.ReceiveAsync(_receiveArgs);

            if (!willRaiseEvent)
            {
                ProcessReceive(_receiveArgs);
            }

            // 发送线程
            ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadUpdate));
        }
Пример #3
0
        /// <summary>
        /// 初始化频道
        /// </summary>
        public void InitChannel(MainThreadSyncContext context, Socket socket, Type packageCoderType, int packageBodyMaxSize)
        {
            if (packageCoderType == null)
            {
                throw new System.ArgumentException($"packageCoderType is null.");
            }
            if (packageBodyMaxSize <= 0)
            {
                throw new System.ArgumentException($"packageMaxSize is invalid : {packageBodyMaxSize}");
            }

            _context        = context;
            _socket         = socket;
            _socket.NoDelay = true;

            // 创建编码解码器
            _packageCoder = (NetworkPackageCoder)Activator.CreateInstance(packageCoderType);
            _packageCoder.InitCoder(this, packageBodyMaxSize);
            _packageMaxSize = packageBodyMaxSize + _packageCoder.GetPackageHeaderSize();

            // 创建字节缓冲类
            // 注意:字节缓冲区长度,推荐4倍最大包体长度
            int byteBufferSize = _packageMaxSize * 4;
            int tempBufferSize = _packageMaxSize * 2;

            _sendBuffer    = new ByteBuffer(byteBufferSize);
            _decodeBuffer  = new ByteBuffer(byteBufferSize);
            _receiveBuffer = new byte[tempBufferSize];

            // 创建IOCP接收类
            _receiveArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            _receiveArgs.SetBuffer(_receiveBuffer, 0, _receiveBuffer.Length);

            // 创建IOCP发送类
            _sendArgs.Completed += new EventHandler <SocketAsyncEventArgs>(IO_Completed);
            _sendArgs.SetBuffer(_sendBuffer.GetBuffer(), 0, _sendBuffer.Capacity);
        }