UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReplicationProtocolManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "Containers/Map.h"
7#include "UObject/ObjectKey.h"
8
12
13namespace UE::Net::Private
14{
15
23
25{
26public:
28
29 /* Create protocol from registered fragment data with provided Id, verification is optional */
31
32 /* Get an existing replication protocol */
34
36 template<typename T>
38
40 template<typename T>
41 void ForEachProtocol(T&& Functor) const;
42
43 /* Destroy existing replication protocol */
44 IRISCORE_API void DestroyReplicationProtocol(const FReplicationProtocol* ReplicationProtocol);
45
53
55
56public:
57
60
63
65 IRISCORE_API static void FragmentListToString(FStringBuilderBase& StringBuilder, const FReplicationFragments& Fragments);
66
67private:
68 void InternalDestroyReplicationProtocol(const FReplicationProtocol* Protocol);
69 void InternalDeferDestroyReplicationProtocol(const FReplicationProtocol* Protocol);
70 void PruneProtocolsPendingDestroy();
71
72 struct FRegisteredProtocolInfo
73 {
74 const FReplicationProtocol* Protocol;
75 FObjectKey TemplateKey;
76
77 bool operator==(const FRegisteredProtocolInfo& Other) const { return Protocol == Other.Protocol && TemplateKey == Other.TemplateKey; };
78 };
79
82
83 // We use the pointer as key, we have full control over lifetime of descriptors so this should not be a problem
85 TArray<const FReplicationProtocol*> PendingDestroyProtocols;
86};
87
88template<typename T>
90{
91 // Find protocols using the descriptor being invalidated
92 for (auto It = RegisteredProtocols.CreateConstKeyIterator(ProtocolId); It; ++It)
93 {
94 const FRegisteredProtocolInfo& Info = It.Value();
95 Functor(Info.Protocol, Info.TemplateKey);
96 }
97}
98
99template<typename T>
101{
102 for (auto It = RegisteredProtocols.CreateConstIterator(); It; ++It)
103 {
104 const FRegisteredProtocolInfo& Info = It.Value();
105 Functor(Info.Protocol, Info.TemplateKey);
106 }
107}
108
109}
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition UnrealString.h.inl:34
Definition ReplicationProtocolManager.h:25
IRISCORE_API const FReplicationProtocol * CreateReplicationProtocol(const FReplicationProtocolIdentifier ProtocolId, const FReplicationFragments &Fragments, const TCHAR *DebugName, const FCreateReplicationProtocolParameters &Params=FCreateReplicationProtocolParameters())
Definition ReplicationProtocolManager.cpp:254
IRISCORE_API void DestroyReplicationProtocol(const FReplicationProtocol *ReplicationProtocol)
Definition ReplicationProtocolManager.cpp:540
IRISCORE_API const FReplicationProtocol * GetReplicationProtocol(FReplicationProtocolIdentifier ProtocolId, FObjectKey TemplateKey)
Definition ReplicationProtocolManager.cpp:228
~FReplicationProtocolManager()
Definition ReplicationProtocolManager.cpp:604
IRISCORE_API void InvalidateDescriptor(const FReplicationStateDescriptor *InvalidatedReplicationStateDescriptor)
Definition ReplicationProtocolManager.cpp:586
static IRISCORE_API void DestroyInstanceProtocol(FReplicationInstanceProtocol *)
Definition ReplicationProtocolManager.cpp:153
void ForEachProtocol(FReplicationProtocolIdentifier ProtocolId, T &&Functor) const
Definition ReplicationProtocolManager.h:89
static IRISCORE_API void FragmentListToString(FStringBuilderBase &StringBuilder, const FReplicationFragments &Fragments)
Definition ReplicationProtocolManager.cpp:241
static IRISCORE_API FReplicationProtocolIdentifier CalculateProtocolIdentifier(const FReplicationFragments &Fragments)
Definition ReplicationProtocolManager.cpp:170
static IRISCORE_API bool ValidateReplicationProtocol(const FReplicationProtocol *, const FReplicationFragments &Fragments, bool bLogFragmentErrors=true)
Definition ReplicationProtocolManager.cpp:186
static IRISCORE_API FReplicationInstanceProtocol * CreateInstanceProtocol(const FReplicationFragments &Fragments, UE::Net::EReplicationFragmentTraits ObjectTraits)
Definition ReplicationProtocolManager.cpp:57
Definition Object.h:95
Definition NetworkVersion.cpp:28
uint32 FReplicationProtocolIdentifier
Definition ReplicationProtocol.h:13
EReplicationFragmentTraits
Definition ReplicationFragment.h:102
Definition ObjectKey.h:19
Definition ReplicationProtocol.h:42
Definition ReplicationProtocol.h:83
Definition ReplicationStateDescriptor.h:199
Definition ReplicationProtocolManager.h:17
const UObject * TemplateKey
Definition ReplicationProtocolManager.h:18
int32 TypeStatsIndex
Definition ReplicationProtocolManager.h:21
bool bHasTemplateKey
Definition ReplicationProtocolManager.h:20
bool bValidateProtocolId
Definition ReplicationProtocolManager.h:19