protected override void BeginSendMessageTask(object obj) { try { while (true) { if (mIsSendDataEnable == false) { Thread.Sleep(S_SendMessageThreadInterval); continue; } if (mBaseSocketMessageManager.GetWillSendSocketData(out var message)) { int dataLength = mClientSocket.Send(message.mSendMessageByteArray.mBytes, 0, message.mSendMessageByteArray.mDataRealLength, SocketFlags.None); #if UNITY_EDITOR int length = SocketHead.GetPacketLength(message.mSendMessageByteArray.mBytes, 0); Debug.LogEditorInfor($"要发送的数据长度{message.mSendMessageByteArray.mDataRealLength} 实际发送{dataLength} byte={message.mSendMessageByteArray} 头部标识长度{length}"); #endif OnSendMessage(message); BaseSocketSendMessage.RecycleSocketMessageData(message); //回收数据 } Thread.Sleep(S_SendMessageThreadInterval); } } catch (ThreadAbortException e) { } //线程被Abort() 调用时候抛出 catch (Exception e) { OnSocketException($"发送消息异常{e}"); } }
/// <summary>/// 发送tcp 消息/// </summary>/// <param name="protocolId">x协议id</param> public virtual void Send(int protocolId, ByteArray data) { if (mIsConnected == false) { OnSocketException($"发送数据失败,Socket 没有连接上"); return; } // Debug.Log($"Send-- {protocolId} Length={data.mDataRealLength} data={data.mBytes}"); ByteArray sendByteArray = ByteArray.GetByteArray(); sendByteArray.CloneFromByteArray(data); //克隆数据 避免污染源数据 var sendMessage = BaseSocketSendMessage.GetSocketSendMessageData(protocolId, sendByteArray, mClientSocket.RemoteEndPoint, false); mBaseSocketMessageManager.CacheSocketSendData(sendMessage); }