Exemple #1
0
        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;
        }
Exemple #2
0
        //发送数据包
        public void Send(QueueNode <IPackageData> node)
        {
            int nSize = node.item.Pack(packbuffer, 0);

            Send(packbuffer, nSize);

            //回调上层,包处理完成
            if (m_socketSink != null)
            {
                m_socketSink.OnFinishSendData(node);
            }
        }