UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReplicationBridge.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/Map.h"
7
8#include "HAL/Platform.h"
9
11
12#include "Iris/IrisConfig.h"
13
20
21#include "Misc/EnumClassFlags.h"
22
24
25#include "UObject/ObjectKey.h"
27
28#include "ReplicationBridge.generated.h"
29
32class UNetDriver;
33
34namespace UE::Net
35{
36 enum class ENetRefHandleError : uint32;
37
38 struct FNetDependencyInfo;
39 struct FReplicationInstanceProtocol;
40 struct FReplicationProtocol;
41
42 class FNetBitStreamReader;
43 class FNetBitStreamWriter;
44 class FNetSerializationContext;
45 class FNetTokenStoreState;
46 class FReplicationFragment;
47
48 namespace Private
49 {
51 class FNetRefHandleManager;
52 class FNetObjectGroups;
54 class FObjectReferenceCache;
55 class FReplicationProtocolManager;
56 class FReplicationReader;
57 class FReplicationStateDescriptorRegistry;
58 class FReplicationSystemImpl;
59 class FReplicationSystemInternal;
60 class FReplicationWriter;
61
62 struct FChangeMaskCache;
63 struct FCreateNetObjectParams;
65 }
66
68}
69
70#define UE_LOG_BRIDGEID(Category, Verbosity, Format, ...) UE_LOG(Category, Verbosity, TEXT("RepBridge(%u)::") Format, GetReplicationSystem()->GetId(), ##__VA_ARGS__)
71
80
81//------------------------------------------------------------------------
82
83namespace UE::Net
84{
97
99 {
100 None,
105 };
106
107} // end namespace UE::Net
108
109//------------------------------------------------------------------------
114UCLASS(Transient, MinimalAPI)
116{
118
119protected:
123
124public:
127
128
137
139 IRISCORE_API bool IsReplicatedHandle(FNetRefHandle Handle) const;
140
142 IRISCORE_API UE::Net::FNetObjectGroupHandle GetLevelGroup(const UObject* Level) const;
143
145 IRISCORE_API const TMap<FObjectKey, UE::Net::FNetObjectGroupHandle>& GetAllLevelGroups() const;
146
148 bool IsInReceiveUpdate() const { return bInReceiveUpdate; }
149
151 [[nodiscard]] IRISCORE_API FString PrintObjectFromNetRefHandle(FNetRefHandle RefHandle) const;
152
153protected:
156
158 IRISCORE_API virtual void Deinitialize();
159
161 virtual void PreSendUpdate() {}
162
164 virtual void OnStartPreSendUpdate() {}
165
167 virtual void OnPostSendUpdate() {}
168
170 virtual void OnPostReceiveUpdate() {}
171
174
177
178 // Remote interface, invoked from Replication code during serialization
179
185 IRISCORE_API virtual bool CacheNetRefHandleCreationInfo(FNetRefHandle Handle);
186
188 IRISCORE_API virtual void DetachInstance(FNetRefHandle Handle);
189
191 IRISCORE_API virtual void PruneStaleObjects();
192
194 IRISCORE_API virtual void GetInitialDependencies(FNetRefHandle Handle, FNetDependencyInfoArray& OutDependencies) const;
195
197 virtual bool CanCreateDestructionInfo() const { return true; }
198
200 void PreSeamlessTravelGarbageCollect();
201
203 void PostSeamlessTravelGarbageCollect();
204
205protected:
206
207 // Forward calls to internal operations that we allow replication bridges to access
208
210 IRISCORE_API FNetRefHandle InternalCreateNetObject(FNetRefHandle AllocatedHandle, FNetHandle GlobalHandle, const UE::Net::Private::FCreateNetObjectParams& Params);
211
213 IRISCORE_API FNetRefHandle InternalCreateNetObjectFromRemote(FNetRefHandle WantedNetHandle, const UE::Net::Private::FCreateNetObjectParams& Params);
214
216 IRISCORE_API void InternalAttachInstanceToNetRefHandle(FNetRefHandle RefHandle, bool bBindInstanceProtocol, UE::Net::FReplicationInstanceProtocol* InstanceProtocol, UObject* Instance, FNetHandle NetHandle);
217
219 IRISCORE_API void InternalDetachInstanceFromNetRefHandle(UE::Net::Private::FInternalNetRefIndex InternalObjectIndex);
220
222 IRISCORE_API void InternalDestroyNetObject(FNetRefHandle Handle);
223
225 IRISCORE_API void InternalAddSubObject(FNetRefHandle OwnerHandle, FNetRefHandle SubObjectHandle, FNetRefHandle InsertRelativeToSubObjectHandle, UE::Net::ESubObjectInsertionOrder InsertionOrder);
226
227 inline UE::Net::Private::FReplicationProtocolManager* GetReplicationProtocolManager() const { return ReplicationProtocolManager; }
228 inline UReplicationSystem* GetReplicationSystem() const { return ReplicationSystem; }
229 inline UE::Net::Private::FReplicationStateDescriptorRegistry* GetReplicationStateDescriptorRegistry() const { return ReplicationStateDescriptorRegistry; }
230 inline UE::Net::Private::FObjectReferenceCache* GetObjectReferenceCache() const { return ObjectReferenceCache; }
231
233 IRISCORE_API UE::Net::FNetObjectFactoryId GetNetObjectFactoryId(FNetRefHandle RefHandle) const;
234
236 IRISCORE_API UE::Net::FNetObjectGroupHandle CreateLevelGroup(const UObject* Level, FName PackageName);
237
240
242 IRISCORE_API virtual bool IsAllowedToDestroyInstance(const UObject* Instance) const;
243
245 virtual void OnProtocolMismatchReported(FNetRefHandle RefHandle, uint32 ConnectionId) {}
246
249
251 IRISCORE_API virtual void OnPreSeamlessTravelGarbageCollect();
252
254 IRISCORE_API virtual void OnPostSeamlessTravelGarbageCollect();
255
261
262private:
263
264 // Internal operations invoked by ReplicationSystem/ReplicationWriter
265
266 enum class EPendingEndReplicationImmediate : uint8
267 {
268 Yes,
269 No,
270 };
271
272 // Adds the Handle to the list of handles pending deferred EndReplication, if bIsImmediate is true the object will be destroyed after the next update, otherwise
273 // it will be kept around until the handle is no longer ref-counted by any connection. It will however be removed from the set of scopeable objects after the first update so new connections will not add it to their scope.
274 void AddPendingEndReplication(FNetRefHandle Handle, EEndReplicationFlags DestroyFlags, EPendingEndReplicationImmediate Immediate = EPendingEndReplicationImmediate::No);
275
276 void CallPreSendUpdate(float DeltaSeconds);
277 void CallPreSendUpdateSingleHandle(FNetRefHandle Handle);
278 void CallUpdateInstancesWorldLocation();
279 bool CallCacheNetRefHandleCreationInfo(FNetRefHandle Handle);
280 void CallPruneStaleObjects();
281 void CallDetachInstance(FNetRefHandle Handle);
282
283 void PreReceiveUpdate();
284 void PostReceiveUpdate();
285
286private:
287
289 // Internal method to copy state data for Handle
290 void InternalFlushStateData(FNetRefHandle Handle);
291
292 // Internal method to copy state data for Handle and any SubObjects and mark them as being torn-off
293 void InternalTearOff(FNetRefHandle OwnerHandle);
294
295 // Destroy all SubObjects owned by provided handle
296 void InternalDestroySubObjects(FNetRefHandle OwnerHandle, EEndReplicationFlags Flags);
297
302 void NotifyStreamingLevelUnload(const UObject* Level);
303
304 void DestroyLocalNetHandle(FNetRefHandle Handle, EEndReplicationFlags Flags);
305
306 // Tear-off all handles in the PendingTearOff list that has not yet been torn-off
307 void TearOffHandlesPendingTearOff();
308
309 // Update all the handles pending EndReplication
310 void UpdateHandlesPendingEndReplication();
311
312 void SetNetPushIdOnFragments(const TArrayView<const UE::Net::FReplicationFragment*const>& Fragments, const UE::Net::Private::FNetPushObjectHandle& PushHandle);
313 void ClearNetPushIdOnFragments(const TArrayView<const UE::Net::FReplicationFragment*const>& Fragments);
314
315 void DestroyGlobalNetHandle(UE::Net::Private::FInternalNetRefIndex InternalReplicationIndex);
316 void ClearNetPushIds(UE::Net::Private::FInternalNetRefIndex InternalReplicationIndex);
317
320
322 friend UReplicationSystem;
323
324 UReplicationSystem* ReplicationSystem;
325 UE::Net::Private::FReplicationProtocolManager* ReplicationProtocolManager;
326 UE::Net::Private::FReplicationStateDescriptorRegistry* ReplicationStateDescriptorRegistry;
327 UE::Net::Private::FNetRefHandleManager* NetRefHandleManager;
328 UE::Net::Private::FObjectReferenceCache* ObjectReferenceCache;
330
332
334 bool bInReceiveUpdate = false;
335
337 TMap<FNetRefHandle, EEndReplicationFlags> HandlesToStopReplicating;
338
339private:
340
341 struct FPendingEndReplicationInfo
342 {
343 FPendingEndReplicationInfo(FNetRefHandle InHandle, EEndReplicationFlags InDestroyFlags, EPendingEndReplicationImmediate InImmediate) : Handle(InHandle), DestroyFlags(InDestroyFlags), Immediate(InImmediate) {}
344
345 FNetRefHandle Handle;
346 EEndReplicationFlags DestroyFlags;
347 EPendingEndReplicationImmediate Immediate;
348 };
349 TArray<FPendingEndReplicationInfo> HandlesPendingEndReplication;
350
351};
352
353
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
EEndReplicationFlags
Definition ReplicationBridgeTypes.h:12
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition NetBitStreamWriter.h:11
Definition NetHandle.h:32
Definition NetObjectGroupHandle.h:22
Definition NetRefHandle.h:25
Definition NetSerializationContext.h:31
Definition NetObjectGroups.h:52
Definition NetRefHandleManager.h:72
Definition ObjectReferenceCache.h:38
Definition ReplicationProtocolManager.h:25
Definition ReplicationStateDescriptorRegistry.h:31
Definition ReplicationSystem.cpp:70
Definition ReplicationSystemInternal.h:46
Definition NetDriver.h:799
Definition ObjectReplicationBridge.h:83
Definition Object.h:95
Definition ReplicationBridge.h:116
IRISCORE_API void DestroyLevelGroup(const UObject *Level)
UReplicationSystem * GetReplicationSystem() const
Definition ReplicationBridge.h:228
virtual void UpdateInstancesWorldLocation()
Definition ReplicationBridge.h:176
virtual bool CanCreateDestructionInfo() const
Definition ReplicationBridge.h:197
virtual void PreSendUpdateSingleHandle(FNetRefHandle Handle)
Definition ReplicationBridge.h:173
virtual void RemoveDestructionInfosForGroup(UE::Net::FNetObjectGroupHandle GroupHandle)
Definition ReplicationBridge.h:260
virtual void OnPostReceiveUpdate()
Definition ReplicationBridge.h:170
virtual void OnProtocolMismatchReported(FNetRefHandle RefHandle, uint32 ConnectionId)
Definition ReplicationBridge.h:245
virtual void OnPostSendUpdate()
Definition ReplicationBridge.h:167
UE::Net::Private::FReplicationStateDescriptorRegistry * GetReplicationStateDescriptorRegistry() const
Definition ReplicationBridge.h:229
virtual void OnErrorWithNetRefHandleReported(UE::Net::ENetRefHandleError ErrorType, FNetRefHandle RefHandle, uint32 ConnectionId, const TArray< FNetRefHandle > &ExtraNetRefHandle)
Definition ReplicationBridge.h:248
bool IsInReceiveUpdate() const
Definition ReplicationBridge.h:148
virtual void PreSendUpdate()
Definition ReplicationBridge.h:161
UE::Net::Private::FObjectReferenceCache * GetObjectReferenceCache() const
Definition ReplicationBridge.h:230
virtual void OnStartPreSendUpdate()
Definition ReplicationBridge.h:164
UE::Net::Private::FReplicationProtocolManager * GetReplicationProtocolManager() const
Definition ReplicationBridge.h:227
Definition ReplicationSystem.h:70
Definition OverriddenPropertySet.cpp:45
@ None
Definition ReplicationDataStreamDebug.h:25
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
Definition NetworkVersion.cpp:28
uint8 FNetObjectFactoryId
Definition NetObjectFactoryRegistry.h:18
ENetRefHandleError
Definition NetEnums.h:130
@ InvalidNetObjectFactoryId
Definition NetObjectFactoryRegistry.h:19
TArray< FNetDependencyInfo, TInlineAllocator< 32 > > FNetDependencyInfoArray
Definition ReplicationBridge.h:67
ESubObjectInsertionOrder
Definition ReplicationBridge.h:99
Definition ReplicationBridge.h:73
bool bIsDestructionInfo
Definition ReplicationBridge.h:78
FReplicationBridgeSerializationContext(UE::Net::FNetSerializationContext &InSerialiazationContext, uint32 InConnectionId, bool bInIsDestructionInfo=false)
Definition ReplicationBridge.h:354
uint32 ConnectionId
Definition ReplicationBridge.h:77
UE::Net::FNetSerializationContext & SerializationContext
Definition ReplicationBridge.h:76
Definition ReplicationBridge.h:87
bool bUseDistanceBasedPrioritization
Definition ReplicationBridge.h:93
FVector Location
Definition ReplicationBridge.h:89
UE::Net::FNetObjectFactoryId NetFactoryId
Definition ReplicationBridge.h:95
const UObject * Level
Definition ReplicationBridge.h:91
Definition ReplicationProtocol.h:42
Definition ChangeMaskCache.h:17
Definition NetRefHandleManagerTypes.h:18