private void SendInternal() { // 清空缓存 _sendBuffer.Clear(); // 合并数据一起发送 while (_sendQueue.Count > 0) { // 如果不够写入一个最大的消息包 if (_sendBuffer.WriteableBytes < _packageMaxSize) { break; } // 数据压码 System.Object packet = _sendQueue.Dequeue(); _packageCoder.Encode(_sendBuffer, packet); } // 请求操作 _sendArgs.SetBuffer(0, _sendBuffer.ReadableBytes); bool willRaiseEvent = _socket.SendAsync(_sendArgs); if (!willRaiseEvent) { ProcessSend(_sendArgs); } }
private void UpdateSending() { if (_isSending == false && _sendQueue.Count > 0) { _isSending = true; // 清空缓存 _sendBuffer.Clear(); // 合并数据一起发送 while (_sendQueue.Count > 0) { // 如果不够写入一个最大的消息包 if (_sendBuffer.WriteableBytes < _packageMaxSize) { break; } // 数据压码 INetworkPackage package = _sendQueue.Dequeue(); _packageCoder.Encode(_sendBuffer, package); } // 请求操作 _sendArgs.SetBuffer(0, _sendBuffer.ReadableBytes); bool willRaiseEvent = _socket.SendAsync(_sendArgs); if (!willRaiseEvent) { ProcessSend(_sendArgs); } } }
/// <summary> /// 主线程内更新 /// </summary> public void Update() { if (IOSocket == null || IOSocket.Connected == false) { return; } // 接收数据 if (_isReceiving == false) { _isReceiving = true; // 清空缓存 _packageCoder.ClearReceiveBuffer(); // 请求操作 _receiveArgs.SetBuffer(0, _packageCoder.GetReceiveBufferCapacity()); bool willRaiseEvent = IOSocket.ReceiveAsync(_receiveArgs); if (!willRaiseEvent) { ProcessReceive(_receiveArgs); } } // 发送数据 if (_isSending == false && _sendQueue.Count > 0) { _isSending = true; // 清空缓存 _packageCoder.ClearSendBuffer(); // 合并数据一起发送 while (_sendQueue.Count > 0) { // 数据压码 System.Object packet = _sendQueue.Dequeue(); _packageCoder.Encode(packet); // 如果已经超过一个最大包体尺寸 // 注意:发送的数据理论最大值为俩个最大包体大小 if (_packageCoder.GetSendBufferWriterIndex() >= _packageMaxSize) { break; } } // 请求操作 _sendArgs.SetBuffer(0, _packageCoder.GetSendBufferReadableBytes()); bool willRaiseEvent = IOSocket.SendAsync(_sendArgs); if (!willRaiseEvent) { ProcessSend(_sendArgs); } } }