void ReliabilityHandlerComponent::Outgoing(FBitWriter& Packet) { switch (State) { case Handler::Component::State::Initialized: { FBitWriter Local; Local.AllowAppend(true); Local.SetAllowResize(true); if (IsActive() && IsValid()) { bool PacketHasData = Packet.GetNumBytes() > 0; Local.Serialize(&PacketHasData, sizeof(bool)); Local.SerializeIntPacked(RemotePacketID); // Save packet for reliability if (PacketHasData) { Local.SerializeIntPacked(LocalPacketID); Local.Serialize(Packet.GetData(), Packet.GetNumBytes()); ++LocalPacketID; BufferedPacket* ReliablePacket = new BufferedPacket; uint8* Data = new uint8[Packet.GetNumBytes()]; memcpy(Data, Packet.GetData(), Packet.GetNumBytes()); ReliablePacket->Data = Data; ReliablePacket->Id = LocalPacketID; ReliablePacket->BytesCount = Packet.GetNumBytes(); ReliablePacket->SendTime = Handler->Time + ResendResolutionTime; BufferedPackets.Enqueue(ReliablePacket); } Packet = Local; break; } } default: { break; } } }