示例#1
0
        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}");
            }
        }
示例#2
0
        /// <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);
        }