Files
UnrealEngineUWP/Engine/Plugins/Runtime/ReplicationSystemTestPlugin/Source/Private/Tests/DataStream/MockDataStream.h
ryan gerleve e5fc7229a0 Add a new gracefully-closing state to NetConnection that waits for reliable data to be acknowledged before actually closing communication, and support this in Iris.
This helps make sure reliable client RPCs sent right before the server gracefully disconnects a client by destroying their PlayerController are received, especially under packet loss.
Can be disabled by setting the cvar net.GracefulCloseEnabled.

#rb LouisPhilippe.Seguin, Peter.Engstrom

[CL 34379986 by ryan gerleve in ue5-main branch]
2024-06-14 14:58:36 -04:00

56 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Iris/DataStream/DataStream.h"
#include "Net/Core/Misc/ResizableCircularQueue.h"
#include "MockDataStream.generated.h"
UCLASS()
class UMockDataStream : public UDataStream
{
GENERATED_BODY()
public:
struct FFunctionCallStatus
{
uint32 WriteDataCallCount;
uint32 ReadDataCallCount;
uint32 ProcessPacketDeliveryStatusCallCount;
uint32 ProcessPacketDeliveryStatusMagicValue;
};
struct FFunctionCallSetup
{
// WriteData
EWriteResult WriteDataReturnValue;
uint32 WriteDataBitCount;
uint32 WriteDataRecordMagicValue;
// ReadData
uint32 ReadDataBitCount;
};
inline void SetFunctionCallSetup(const FFunctionCallSetup& Setup) { CallSetup = Setup; }
inline const FFunctionCallStatus& GetFunctionCallStatus() const { return CallStatus; }
inline void ResetFunctionCallStatus() { CallStatus = FFunctionCallStatus({}); }
protected:
virtual EWriteResult WriteData(UE::Net::FNetSerializationContext& context, FDataStreamRecord const*& OutRecord) override;
virtual void ReadData(UE::Net::FNetSerializationContext& context) override;
virtual void ProcessPacketDeliveryStatus(UE::Net::EPacketDeliveryStatus Status, FDataStreamRecord const* Record) override;
virtual bool HasAcknowledgedAllReliableData() const override;
private:
struct FRecord : public FDataStreamRecord
{
uint32 MagicValue;
};
UMockDataStream();
FFunctionCallStatus CallStatus;
FFunctionCallSetup CallSetup;
TResizableCircularQueue<FRecord, TFixedAllocator<256>> Records;
};