/// <summary> /// 检查队列里是否有要发送的数据,如果有则进行发送处理 /// </summary> public void PeekSend() { lock (m_PendingBuffer) { if (isSending || m_PendingBuffer.Count == 0) { return; } // TODO 这里要不要考虑进行并报发送处理 isSending = true; if (m_PendingBuffer.Count > 1) { // 2 个包以上,进行拼包后再发送 var buffs = m_PendingBuffer.ToArray(); m_PendingBuffer.Clear(); int offSet = 0; foreach (var b in buffs) { offSet += b.Length; } DogBuffer sendBuff; if (offSet < 4000) { sendBuff = DogBuffer.GetFromPool4K(); } else { sendBuff = DogBuffer.GetFromPool32K(); } foreach (var buff in buffs) { Buffer.BlockCopy(buff.Bytes, 0, sendBuff.Bytes, sendBuff.Length, buff.Length); sendBuff.Length += buff.Length; buff.Release(); } SendEventArgs.UserToken = sendBuff; SendEventArgs.SetBuffer(sendBuff.Bytes, 0, sendBuff.Length); Socket.SendAsync(SendEventArgs); } else { DogBuffer buff; buff = m_PendingBuffer.Dequeue(); SendEventArgs.UserToken = buff; SendEventArgs.SetBuffer(buff.Bytes, 0, buff.Length); Socket.SendAsync(SendEventArgs); } } }
/// <summary> /// 重新异步开始接受数据 /// </summary> internal void SyncRecvData() { if (Socket == null || !Socket.Connected) { return; } var buff = DogBuffer.GetFromPool4K(); RecvBuffer = buff; ReceiveEventArgs.SetBuffer(buff.Bytes, 0, buff.Bytes.Length); Socket.ReceiveAsync(ReceiveEventArgs); }