UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReplicationSystem.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"
9#include "Iris/IrisConfig.h"
15
16#include "ReplicationSystem.generated.h"
17
18// The number of inline elements the TInlineAllocator for ReplicationSystems can store.
19// Projects may define this to a value best suited for their needs.
20#ifndef UE_NUM_INLINE_REPLICATIONSYSTEMS
21 #define UE_NUM_INLINE_REPLICATIONSYSTEMS 8
22#endif
23
25class UDataStream;
26class UFunction;
27class UNetBlobHandler;
28class UNetDriver;
33namespace UE::Net
34{
37
38 class FNetBitArray;
40 class FNetObjectAttachment;
41 class FNetObjectReference;
42 class FReplicationSystemDelegates;
43 class FReplicationSystemFactory;
44 class FNetTokenStore;
45 class FStringTokenStore;
46 class FNameTokenStore;
47 class FWorldLocations;
48 class FNetTokenResolveContext;
49
50 struct FReplicationSystemUtil;
51 struct FReplicationView;
52 struct FNetDebugName;
53 struct FNetMetrics;
54 struct FReplicationProtocol;
55
56 enum class ENetFilterStatus : uint32;
58 enum class ENetRefHandleError : uint32;
59 enum class EReplicationCondition : uint32;
60
61 namespace Private
62 {
63 class FReplicationSystemImpl;
64 class FReplicationSystemInternal;
65 }
66}
67
70{
72
76
77public:
78
80 {
82 UObjectReplicationBridge* ReplicationBridge = nullptr;
83
88 uint32 MaxReplicatedObjectCount = 65536U;
89
96 uint32 InitialNetObjectListCount = 65536U;
97
104 uint32 NetObjectListGrowCount = 16384U;
105
112 uint32 PreAllocatedMemoryBuffersObjectCount = 65536U;
113
119 uint32 MaxReplicationWriterObjectCount = 0;
120
122 uint32 MaxDeltaCompressedObjectCount = 2048U;
123
125 uint32 MaxNetObjectGroupCount = 2048U;
126
128 bool bIsServer = false;
129
134 bool bAllowObjectReplication = false;
135
137 bool bUseRemoteObjectReferences = false;
138
143 bool bAllowParallelTasks = false;
144
146 bool bAllowMinimalUpdateIfNoConnections = true;
147
150
152 UE::Net::FNetTokenStore* NetTokenStore = nullptr;
153 };
154
156 uint32 GetId() const { return Id; }
157
159 IRISCORE_API uint32 GetMaxConnectionCount() const;
160
162 bool IsServer() const { return bIsServer; }
163
165 bool AllowObjectReplication() { return bAllowObjectReplication; }
166
168 IRISCORE_API bool IsUsingRemoteObjectReferences() const;
169
174 IRISCORE_API void NetUpdate(float DeltaSeconds);
175
180 IRISCORE_API void TickPostReceive();
181
183 IRISCORE_API void PreReceiveUpdate();
184
186 IRISCORE_API void PostReceiveUpdate();
187
195
199 IRISCORE_API void PostSendUpdate();
200
205 IRISCORE_API void AddConnection(uint32 ConnectionId);
206
211 IRISCORE_API void RemoveConnection(uint32 ConnectionId);
212
218 IRISCORE_API bool IsValidConnection(uint32 ConnectionId) const;
219
225 IRISCORE_API void SetConnectionGracefullyClosing(uint32 ConnectionId) const;
226
232 IRISCORE_API void SetReplicationEnabledForConnection(uint32 ConnectionId, bool bReplicationEnabled);
233
240
241 // Prioritization
242
252 IRISCORE_API void SetReplicationView(uint32 ConnectionId, const UE::Net::FReplicationView& View);
253
261 IRISCORE_API void SetStaticPriority(FNetRefHandle Handle, float Priority);
262
274 IRISCORE_API bool SetPrioritizer(FNetRefHandle Handle, UE::Net::FNetObjectPrioritizerHandle PrioritizerHandle);
275
276
285 IRISCORE_API UE::Net::FNetObjectPrioritizerHandle GetPrioritizerHandle(const FName PrioritizerName) const;
286
287
294 IRISCORE_API UNetObjectPrioritizer* GetPrioritizer(const FName PrioritizerName) const;
295
302 IRISCORE_API UDataStream* GetDataStream(uint32 ConnectionId, FName Name);
303
305 IRISCORE_API const UDataStream* GetDataStream(uint32 ConnectionId, FName Name) const;
306
308 IRISCORE_API bool IsKnownDataStreamDefinition(FName Name) const;
309
316 IRISCORE_API UDataStream* OpenDataStream(uint32 ConnectionId, FName Name);
317
323 IRISCORE_API void CloseDataStream(uint32 ConnectionId, FName Name);
324
325 // NetBlob
326
334 IRISCORE_API bool RegisterNetBlobHandler(UNetBlobHandler* Handler);
335
343 IRISCORE_API bool QueueNetObjectAttachment(uint32 ConnectionId, const UE::Net::FNetObjectReference& TargetRef, const TRefCountPtr<UE::Net::FNetObjectAttachment>& Attachment);
344
354 IRISCORE_API bool SendRPC(const UObject* RootObject, const UObject* SubObject, const UFunction* Function, const void* Parameters);
355
366 IRISCORE_API bool SendRPC(uint32 ConnectionId, const UObject* RootObject, const UObject* SubObject, const UFunction* Function, const void* Parameters);
367
374 IRISCORE_API bool SetRPCSendPolicyFlags(const UFunction* Function, UE::Net::ENetObjectAttachmentSendPolicyFlags SendFlags);
375
377 IRISCORE_API void ResetRPCSendPolicyFlags();
378
380 IRISCORE_API UObjectReplicationBridge* GetReplicationBridge() const;
381
383 template<typename T>
384 T* GetReplicationBridgeAs() const { return Cast<T>(GetReplicationBridge()); }
385
390 IRISCORE_API UE::Net::FNetTokenStore* GetNetTokenStore();
391
396 IRISCORE_API const UE::Net::FNetTokenStore* GetNetTokenStore() const;
397
402 IRISCORE_API UE::Net::FNetTokenResolveContext GetNetTokenResolveContext(uint32 ConnectionId) const;
403
410 IRISCORE_API bool IsNetRefHandleAssigned(FNetRefHandle Handle) const;
411
417 IRISCORE_API const UE::Net::FReplicationProtocol* GetReplicationProtocol(FNetRefHandle Handle) const;
418
424 IRISCORE_API const UE::Net::FNetDebugName* GetDebugName(FNetRefHandle Handle) const;
425
426 // Groups
427
436 IRISCORE_API FNetObjectGroupHandle CreateGroup(FName GroupName);
437
442 IRISCORE_API void DestroyGroup(FNetObjectGroupHandle GroupHandle);
443
448 IRISCORE_API FNetObjectGroupHandle FindGroup(FName GroupName) const;
449
455 IRISCORE_API void AddToGroup(FNetObjectGroupHandle GroupHandle, FNetRefHandle Handle);
456
462 IRISCORE_API void RemoveFromGroup(FNetObjectGroupHandle GroupHandle, FNetRefHandle Handle);
463
468 IRISCORE_API void RemoveFromAllGroups(FNetRefHandle Handle);
469
476 IRISCORE_API bool IsInGroup(FNetObjectGroupHandle GroupHandle, FNetRefHandle Handle) const;
477
483 IRISCORE_API bool IsValidGroup(FNetObjectGroupHandle GroupHandle) const;
484
486 IRISCORE_API FNetObjectGroupHandle GetNotReplicatedNetObjectGroup() const;
487
489 IRISCORE_API FNetObjectGroupHandle GetNetGroupOwnerNetObjectGroup() const;
490
492 IRISCORE_API FNetObjectGroupHandle GetNetGroupReplayNetObjectGroup() const;
493
494 // Filtering
495
502 IRISCORE_API void SetOwningNetConnection(FNetRefHandle Handle, uint32 ConnectionId);
503
508 IRISCORE_API uint32 GetOwningNetConnection(FNetRefHandle Handle) const;
509
526 IRISCORE_API bool SetFilter(FNetRefHandle Handle, UE::Net::FNetObjectFilterHandle FilterHandle, FName FilterConfigProfile=NAME_None);
527
536 IRISCORE_API UE::Net::FNetObjectFilterHandle GetFilterHandle(const FName FilterName) const;
537
544 IRISCORE_API UNetObjectFilter* GetFilter(const FName FilterName) const;
545
550
551 // Group Filtering
552
563 IRISCORE_API bool AddExclusionFilterGroup(FNetObjectGroupHandle GroupHandle);
564
577 IRISCORE_API bool AddInclusionFilterGroup(FNetObjectGroupHandle GroupHandle);
578
580 IRISCORE_API void RemoveGroupFilter(FNetObjectGroupHandle GroupHandle);
581
583 IRISCORE_API void SetGroupFilterStatus(FNetObjectGroupHandle GroupHandle, uint32 ConnectionId, UE::Net::ENetFilterStatus ReplicationStatus);
584
589 IRISCORE_API void SetGroupFilterStatus(FNetObjectGroupHandle GroupHandle, const UE::Net::FNetBitArray& Connections, UE::Net::ENetFilterStatus ReplicationStatus);
590
592 IRISCORE_API void SetGroupFilterStatus(FNetObjectGroupHandle GroupHandle, UE::Net::ENetFilterStatus ReplicationStatus);
593
594
595 // SubObject filtering
601 IRISCORE_API FNetObjectGroupHandle GetOrCreateSubObjectFilter(FName GroupName);
602
604 IRISCORE_API FNetObjectGroupHandle GetSubObjectFilterGroupHandle(FName GroupName) const;
605
607 IRISCORE_API void SetSubObjectFilterStatus(FName GroupName, UE::Net::FConnectionHandle ConnectionHandle, UE::Net::ENetFilterStatus ReplicationStatus);
608
610 IRISCORE_API void RemoveSubObjectFilter(FName GroupName);
611
626 IRISCORE_API bool SetReplicationConditionConnectionFilter(FNetRefHandle Handle, UE::Net::EReplicationCondition Condition, uint32 ConnectionId, bool bEnable);
627
637 IRISCORE_API bool SetReplicationCondition(FNetRefHandle Handle, UE::Net::EReplicationCondition Condition, bool bEnable);
638
639
646 IRISCORE_API void SetDeltaCompressionStatus(FNetRefHandle Handle, UE::Net::ENetObjectDeltaCompressionStatus Status);
647
652 IRISCORE_API void SetIsNetTemporary(FNetRefHandle Handle);
653
658 IRISCORE_API void TearOffNextUpdate(FNetRefHandle Handle);
659
667 IRISCORE_API void ForceNetUpdate(FNetRefHandle Handle);
668
674 IRISCORE_API void MarkDirty(FNetRefHandle Handle);
675
681 IRISCORE_API const UE::Net::FWorldLocations& GetWorldLocations() const;
682
683 /* Init data streams for a connection. For internal use by UDataStreamChannel. */
684 IRISCORE_API void InitDataStreamManager(uint32 ConnectionId, UDataStreamManager* DataStreamManager);
685
693 IRISCORE_API void SetConnectionUserData(uint32 ConnectionId, UObject* UserData);
694
701 IRISCORE_API UObject* GetConnectionUserData(uint32 ConnectionId) const;
702
703 int32 GetPIEInstanceID() const { return PIEInstanceID; }
704
706 IRISCORE_API void SetCullDistanceOverride(FNetRefHandle Handle, float Dist);
707
709 IRISCORE_API void ClearCullDistanceOverride(FNetRefHandle Handle);
710
712 IRISCORE_API float GetCullDistance(FNetRefHandle Handle, float DefaultValue = -1.0f) const;
713
715 double GetElapsedTime() const { return ElapsedTime; }
716
718 IRISCORE_API void ReportProtocolMismatch(uint64 NetRefHandleId, uint32 ConnectionId);
719
721 IRISCORE_API void ReportErrorWithNetRefHandle(UE::Net::ENetRefHandleError ErrorType, uint64 NetRefHandleId, uint32 ConnectionId, const TArray<uint64>& ExtraNetRefHandles);
722
724 IRISCORE_API void CollectNetMetrics(UE::Net::FNetMetrics& OutNetMetrics) const;
725
727 IRISCORE_API void ResetNetMetrics();
728
730
731public:
732 // For internal use and not exported.
733 UE::Net::Private::FReplicationSystemInternal* GetReplicationSystemInternal();
734 const UE::Net::Private::FReplicationSystemInternal* GetReplicationSystemInternal() const;
735
736private:
738
741
742 void Init(uint32 InId, const FReplicationSystemParams& Params);
743 void Shutdown();
744
745 // UObject interface
746 IRISCORE_API static void AddReferencedObjects(UObject* InThis, FReferenceCollector& Collector);
747
748private:
749 friend UNetDriver;
750
751 IRISCORE_API void NotifyStreamingLevelUnload(const UObject* Level);
752
754 IRISCORE_API void PreSeamlessTravelGarbageCollect();
755
757 IRISCORE_API void PostSeamlessTravelGarbageCollect();
758
759 void SetPIEInstanceID(int32 InPIEInstanceID) { PIEInstanceID = InPIEInstanceID; }
760
761private:
762
763 void PostGarbageCollection();
764 void CollectGarbage();
765
767
768 FDelegateHandle PostGarbageCollectHandle;
769
771 TObjectPtr<UObjectReplicationBridge> ReplicationBridge;
772
773 double ElapsedTime = 0;
774 uint32 Id;
775 int32 PIEInstanceID;
776 uint32 bIsServer : 1;
777 uint32 bAllowObjectReplication : 1;
778 uint32 bDoCollectGarbage : 1;
779};
780
781namespace UE::Net
782{
783
785
788
821
823{
824 return Id >= static_cast<uint32>(FReplicationSystemFactory::ReplicationSystems.Num()) ? nullptr : FReplicationSystemFactory::ReplicationSystems[Id];
825}
826
827} // end namespace UE::Net
828
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
void CollectGarbage(EObjectFlags KeepFlags, bool bPerformFullPurge)
Definition GarbageCollection.cpp:6203
void Init()
Definition LockFreeList.h:4
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition UObjectGlobals.h:2492
Definition ArrayView.h:139
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition RefCounting.h:454
Definition DataStreamManager.h:40
Definition DataStream.h:60
Definition ConnectionHandle.h:17
Definition NetBitArray.h:74
Definition NetHandle.h:32
Definition NetObjectGroupHandle.h:22
Definition NetObjectReference.h:38
Definition NetRefHandle.h:25
Definition NetToken.h:112
Definition NetTokenStore.h:189
Definition ReplicationSystemDelegates.h:18
Definition ReplicationSystem.h:790
static IRISCORE_API UReplicationSystem * CreateReplicationSystem(const UReplicationSystem::FReplicationSystemParams &Params)
Definition ReplicationSystem.cpp:2118
static IRISCORE_API FReplicationSystemCreatedDelegate & GetReplicationSystemCreatedDelegate()
Definition ReplicationSystem.cpp:2103
static IRISCORE_API FReplicationSystemDestroyedDelegate & GetReplicationSystemDestroyedDelegate()
Definition ReplicationSystem.cpp:2109
friend UReplicationSystem * GetReplicationSystem(uint32 Id)
Definition ReplicationSystem.h:822
static IRISCORE_API TArrayView< UReplicationSystem * > GetAllReplicationSystems()
Definition ReplicationSystem.cpp:2193
static IRISCORE_API void DestroyReplicationSystem(UReplicationSystem *System)
Definition ReplicationSystem.cpp:2158
Definition WorldLocations.h:57
Definition ReplicationSystemInternal.h:46
Definition Class.h:2476
Definition NetBlobHandler.h:44
Definition NetDriver.h:799
Definition NetObjectFilter.h:178
Definition NetObjectPrioritizer.h:158
Definition ObjectReplicationBridge.h:83
Definition Object.h:95
Definition ReplicationSystem.h:70
T * GetReplicationBridgeAs() const
Definition ReplicationSystem.h:384
int32 GetPIEInstanceID() const
Definition ReplicationSystem.h:703
IRISCORE_API bool IsReplicationEnabledForConnection(uint32 ConnectionId) const
uint32 GetId() const
Definition ReplicationSystem.h:156
bool IsServer() const
Definition ReplicationSystem.h:162
double GetElapsedTime() const
Definition ReplicationSystem.h:715
bool AllowObjectReplication()
Definition ReplicationSystem.h:165
Definition ExpressionParserTypes.h:21
Definition OverriddenPropertySet.cpp:45
Definition NetworkVersion.cpp:28
uint32 FNetObjectPrioritizerHandle
Definition ObjectReplicationBridge.h:34
UReplicationSystem * GetReplicationSystem(uint32 Id)
Definition ReplicationSystem.h:822
EReplicationCondition
Definition ReplicationCondition.h:12
ENetRefHandleError
Definition NetEnums.h:130
FReplicationSystemLifeTime FReplicationSystemDestroyedDelegate
Definition ReplicationSystem.h:787
uint32 FNetObjectFilterHandle
Definition ReplicationFiltering.h:20
FReplicationSystemLifeTime FReplicationSystemCreatedDelegate
Definition ReplicationSystem.h:786
ENetObjectDeltaCompressionStatus
Definition ReplicationSystemTypes.h:13
ENetFilterStatus
Definition NetObjectFilter.h:37
ENetObjectAttachmentSendPolicyFlags
Definition ReplicationSystemTypes.h:52
Definition ObjectPtr.h:488
Definition PimplPtr.h:50
Definition NetDebugName.h:17
Definition NetMetrics.h:107
Definition ReplicationProtocol.h:83
Definition ReplicationView.h:19
Definition ReplicationSystem.h:80
UE::Net::FForwardNetRPCCallDelegate ForwardNetRPCCallDelegate
Definition ReplicationSystem.h:149