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); } }
/// <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(); } }