void EncryptionHandlerComponent::Outgoing(FBitWriter& Packet) { switch (State) { case EEncryptionHandler::State::InitializingAsymmetric: { AsymmetricHandlerComponent->Outgoing(Packet); if (AsymmetricHandlerComponent->IsInitialized()) { SetState(EEncryptionHandler::State::InitializingSymmetric); } break; } case EEncryptionHandler::State::InitializingSymmetric: { SymmetricHandlerComponent->Outgoing(Packet); AsymmetricHandlerComponent->Outgoing(Packet); break; } case EEncryptionHandler::State::Initialized: { if(Packet.GetNumBytes() > 0) { SymmetricHandlerComponent->Outgoing(Packet); } break; } default: { break; } } if (State != EEncryptionHandler::State::Initialized && SymmetricHandlerComponent->IsInitialized()) { AsymmetricHandlerComponent->SetActive(false); Initialized(); SetState(EEncryptionHandler::State::Initialized); } }
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; } } }