/// <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)); }
/// <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); }