private void ThreadSend() { byte[] sendBuffer = new byte[BufferSize]; while (!m_Abort && IsConnected()) { // PacketSender packetSender; QueueNode <IPackageData> node = null; lock (m_QueueToSend.SyncRoot) { while (m_QueueToSend.Count <= 0 && !m_Abort) { Monitor.Wait(m_QueueToSend.SyncRoot); } if (m_Abort) { break; } node = (QueueNode <IPackageData>)m_QueueToSend.Dequeue(); } if (null != node) { short nSize = (short)node.item.Pack(sendBuffer, MESSAGE_HEAD_LEN); UnityEngine.Debug.LogError("nSize: " + nSize); short nSizeNet = IPAddress.HostToNetworkOrder(nSize); byte[] packetSizeBytes = BitConverter.GetBytes(nSizeNet); Array.Copy(packetSizeBytes, 0, sendBuffer, 0, PacketLenSize); SocketError error; m_Connection.Send(sendBuffer, 0, nSize + MESSAGE_HEAD_LEN, SocketFlags.None, out error); //int nSize = node.item.Pack(sendBuffer, MESSAGE_HEAD_LEN); //byte[] packetSizeBytes = BitConverter.GetBytes(nSize); //Array.Copy(packetSizeBytes, 0, sendBuffer, 0, PacketLenSize); //SocketError error; //m_Connection.Send(sendBuffer, 0, nSize + MESSAGE_HEAD_LEN, SocketFlags.None, out error); //回调给上层,发送完成 if (null != m_socketSink) { m_socketSink.OnFinishSendData(node); } if (error != SocketError.Success) { UnityEngine.Debug.LogErrorFormat("Send message error:{0}", error.ToString()); } } } m_bRunSend = false; }
//发送数据包 public void Send(QueueNode <IPackageData> node) { int nSize = node.item.Pack(packbuffer, 0); Send(packbuffer, nSize); //回调上层,包处理完成 if (m_socketSink != null) { m_socketSink.OnFinishSendData(node); } }