Files
UnrealEngineUWP/Engine/Source/Runtime/PacketHandlers/ReliabilityHandlerComponent/Public/ReliabilityHandlerComponent.h
jon nabozny c09d6b31a2 Add memory tracking to PacketHandler related classes
[at]Brian.Bekich [at]Ryan.Gerleve [at]Bart.Hawthorne [at]Jake.Leonard [at]John.Barrett
#rb Jake.Leonard, John.Barrett

#ROBOMERGE-OWNER: ryan.vance
#ROBOMERGE-AUTHOR: jon.nabozny
#ROBOMERGE-SOURCE: CL 4854329 via CL 4854330 via CL 4854709 via CL 4854828
#ROBOMERGE-BOT: DEVVR (Main -> Dev-VR)

[CL 4854970 by jon nabozny in Dev-VR branch]
2019-01-30 23:20:09 -05:00

85 lines
2.6 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 FString& Address, FBitReader& Packet) override {}
virtual void OutgoingConnectionless(const FString& 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;
};