Esempio n. 1
0
        private void InternalSend(Packet packet)
        {
            if (Running == false)
            {
                // 表示已处理发送
                packet.Release();
                return;
            }

            // 连接的通知事件
            EventHandler <NetStateSendPacketEventArgs> tempEvent = m_EventSendPacket;

            if (tempEvent != null)
            {
                NetStateSendPacketEventArgs sendEventArgs = new NetStateSendPacketEventArgs(this, packet);
                tempEvent(this, sendEventArgs);

                if (sendEventArgs.IsCancelSend == true)
                {
                    // 表示已处理发送
                    packet.Release();
                    return;
                }
            }

            long iLength = 0;

            PacketProfile packetProfile = PacketProfile.GetOutgoingProfile((byte)packet.PacketID);
            DateTime      dateTimeStart = (packetProfile == null ? DateTime.MinValue : OneServer.NowTime);

            {
                PacketBuffer packetBuffer = packet.AcquireBuffer();
                if (packetBuffer.IsNULL == true)
                {
                    throw new Exception("NetState.InternalSend(...) - packetBuffer.IsNULL == true error!");
                }

                byte[] byteBuffer = packetBuffer.Buffer;
                long   lLength    = packetBuffer.Length;

                // 加密数据
                if (PacketEncoder != null)
                {
                    PacketEncoder.EncodeOutgoingPacket(this, ref byteBuffer, ref lLength);
                }

                m_SendQueue.Enqueue(byteBuffer, 0, lLength);

                // 表示已处理发送
                packet.Release();

                // 实际压缩后的数据长度
                iLength = lLength;
            }
            if (packetProfile != null)
            {
                packetProfile.Record(iLength, OneServer.NowTime - dateTimeStart);
            }
        }
Esempio n. 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="iPacketID"></param>
        /// <param name="iLength"></param>
        public Packet(long iPacketID, long iPacketLength, long iCapacity)
        {
            m_PacketID     = iPacketID;
            m_PacketLength = iPacketLength;
            m_Stream       = PacketWriter.Instance(iCapacity); // 通过InternalCompile(...)的PacketWriter.Release(...)返回进入空闲的集合

            PacketProfile packetProfile = PacketProfile.GetOutgoingProfile(iPacketID);

            if (packetProfile != null)
            {
                packetProfile.RegConstruct();
            }
        }