Files
UnrealEngineUWP/Engine/Source/Runtime/PacketHandlers/ReliabilityHandlerComponent/Public/ReliabilityHandlerComponent.h
Marc Audy 7379fa99c5 Merging //UE5/Release-Engine-Staging to Main (//UE5/Main) @ 14229157
[CL 14233282 by Marc Audy in ue5-main branch]
2020-09-01 14:07:48 -04:00

82 lines
2.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Containers/Queue.h"
#include "PacketHandler.h"
// Symmetric Stream cipher
class RELIABILITYHANDLERCOMPONENT_API ReliabilityHandlerComponent : public HandlerComponent
{
public:
/* Initializes default data */
ReliabilityHandlerComponent();
virtual void CountBytes(FArchive& Ar) const;
virtual void Initialize() override;
virtual bool IsValid() const override;
virtual void Tick(float DeltaTime) override;
virtual void Incoming(FBitReader& Packet) override;
virtual void Outgoing(FBitWriter& Packet, FOutPacketTraits& Traits) override;
/* Queues a packet for resending */
void QueuePacketForResending(uint8* Packet, int32 CountBits, FOutPacketTraits& Traits);
UE_DEPRECATED(4.21, "Use the PacketTraits version for sending packets with additional flags and options")
FORCEINLINE void QueueHandlerPacketForResending(HandlerComponent* InComponent, uint8* Packet, int32 CountBits)
{
FOutPacketTraits EmptyTraits;
QueueHandlerPacketForResending(InComponent, Packet, CountBits, EmptyTraits);
}
/**
* Queues a packet sent through SendHandlerPacket, for resending
*
* @param InComponent The HandlerComponent the packet originated from
* @param Packet The packet to be queued
* @param CountBits The number of bits in the packet
*/
FORCEINLINE void QueueHandlerPacketForResending(HandlerComponent* InComponent, uint8* Packet, int32 CountBits, FOutPacketTraits& Traits)
{
QueuePacketForResending(Packet, CountBits, Traits);
BufferedPackets[BufferedPackets.Num()-1]->FromComponent = InComponent;
}
virtual int32 GetReservedPacketBits() const override;
protected:
/* Buffered Packets in case they need to be resent */
TArray<BufferedPacket*> BufferedPackets;
/* Latest Packet ID */
uint32 LocalPacketID;
/* Latest Packet ID that was ACKED */
uint32 LocalPacketIDACKED;
/* Latest Remote Packet ID */
uint32 RemotePacketID;
/* Latest Remote Packet ID that was ACKED */
uint32 RemotePacketIDACKED;
/* How long to wait before resending an UNACKED packet */
double ResendResolutionTime;
/* Last time we resent UNACKED packets */
double LastResendTime;
};
/* Reliability Module Interface */
class FReliabilityHandlerComponentModuleInterface : public FPacketHandlerComponentModuleInterface
{
public:
virtual TSharedPtr<HandlerComponent> CreateComponentInstance(FString& Options) override;
};