Files
UnrealEngineUWP/Engine/Source/Runtime/PacketHandlers/ReliabilityHandlerComponent/Public/ReliabilityHandlerComponent.h
Max Chen 4561801a81 Merging //UE4/Dev-Main to Dev-Editor (//UE4/Dev-Editor) @7119039
#rb none

[CL 7120528 by Max Chen in Dev-Editor branch]
2019-06-21 01:21:43 -04:00

85 lines
2.7 KiB
C++

// Copyright 1998-2019 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;
virtual void IncomingConnectionless(const TSharedPtr<const FInternetAddr>& Address, FBitReader& Packet) override {}
virtual void OutgoingConnectionless(const TSharedPtr<const FInternetAddr>& Address, 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;
};