UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DataReplication.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 DataReplication.h:
5 Holds classes for data replication (properties and RPCs).
6=============================================================================*/
7#pragma once
8
9#include "CoreMinimal.h"
10#include "Misc/NetworkGuid.h"
11#include "UObject/CoreNet.h"
12#include "Engine/EngineTypes.h"
13#include "UObject/UnrealType.h"
14#include "UObject/GCObject.h"
16
18
20class FOutBunch;
22class FRepLayout;
23class FRepState;
25class UNetConnection;
26class UNetDriver;
27class AActor;
28
33
39
54
74{
75public:
76
78 {
79 // Always execute RPCs immediately
81
82 // Skip RPC execution only if it's not ready to execute
84
85 // Always skip execution of RPC (do validation only, caller will handle execution)
87 };
88
91
98
135
137 UObject* InObject,
139 bool bUseDefaultState = true);
140
141 ENGINE_API void CleanUp();
142
145
148
150 ENGINE_API bool ValidateAgainstState(const UObject* ObjectState);
151
152 //~ Both of these should be private, IMO, but we'll leave them public for now for back compat
153 //~ in case anyone was using SerializeCustomDeltaProperty already.
155 UObject* InObject,
160
163
164 ENGINE_API void CountBytes(FArchive& Ar) const;
165
170
172
174 FNetBitReader& Bunch,
175 const FReplicationFlags& RepFlags,
176 const bool bHasRepLayout,
177 bool& bOutHasUnmapped);
178
191 FNetBitReader& Reader,
193 bool& bOutSkippedRpcExec,
194 const FReplicationFlags& RepFlags,
197
208
212
214
216
217 ENGINE_API bool ReadyForDormancy(bool bDebug=false);
218
220
222
223 ENGINE_API void UpdateUnmappedObjects(bool& bOutHasMoreUnmapped);
224
230
232 {
233 return WeakObjectPtr;
234 }
235
236 inline UObject* GetObject() const
237 {
238 // If this replicator is dormant we have released our strong ref but the object may still be alive.
239 return ObjectPtr ? ObjectPtr : WeakObjectPtr.Get();
240 }
241
243 {
245 WeakObjectPtr = NewObj;
246 }
247
249 {
250 ObjectPtr = nullptr;
251 }
252
253 inline void PreNetReceive()
254 {
256 if ( Object != NULL )
257 {
258 Object->PreNetReceive();
259 }
260 }
261
262 inline void PostNetReceive()
263 {
265 if ( Object != NULL )
266 {
267 Object->PostNetReceive();
268 }
269 }
270
274 const int32 ElementIndex,
276
281 FNetBitWriter& Bunch,
282 FNetBitWriter& Payload) const;
283
289
290 bool IsDirtyForReplay() const { return bDirtyForReplay; }
291 void ResetReplayDirtyTracking() { bDirtyForReplay = true; }
292
293public:
294
297
300
303
306
309
312
315
316private:
317
319 uint32 bSupportsFastArrayDelta : 1;
320
325 uint32 bCanUseNonDirtyOptimization : 1;
326
328 uint32 bDirtyForReplay : 1;
329
330public:
331
336
338
340
343
346
348
351
354
355 //~ RepNotify properties were moved to FReceivingRepState.
356 //~ CustomDeltaState properties were moved to FSendingRepState.
357 //~ Retirement properties were moved to FSendingRepState.
358
360
361private:
362 TWeakObjectPtr<UObject> WeakObjectPtr;
363
368 TArray<FRPCPendingLocalCall> PendingTransactionalRPCs;
369
370 static void CallProcessEventForReceivedRPC(UObject* Object, UFunction* Function, uint8* Params);
371};
372
374{
375public:
378
381
383 {
384 Actor = Other.Actor;
385 Other.Actor = nullptr;
386 }
388 {
389 Actor = Other.Actor;
390 Other.Actor = nullptr;
391 return *this;
392 }
393
394private:
395 AActor* Actor;
396};
#define NULL
Definition oodle2base.h:134
@ STRUCT_NetDeltaSerializeNative
Definition Class.h:1078
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
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
bool IsCustomDeltaProperty(const FStructProperty *StructProperty)
Definition DataReplication.h:29
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define LLM_DECLARE_TAG_API(...)
Definition LowLevelMemTracker.h:1117
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition Archive.h:1208
Definition CoreNet.h:73
Definition NameTypes.h:617
Definition CoreNet.h:415
Definition CoreNet.h:384
Definition PackageMapClient.h:92
Definition NetworkGuid.h:12
Definition UnrealType.h:2725
Definition DataReplication.h:74
FNetworkGUID ObjectNetGUID
Definition DataReplication.h:296
UObject * GetObject() const
Definition DataReplication.h:236
TArray< FRPCCallInfo > RemoteFuncInfo
Definition DataReplication.h:350
void PostNetReceive()
Definition DataReplication.h:262
TSet< FNetworkGUID > ReferencedGuids
Definition DataReplication.h:359
ENGINE_API bool ReceivedRPC(FNetBitReader &Reader, TSet< FNetworkGUID > &OutUnmappedGuids, bool &bOutSkippedRpcExec, const FReplicationFlags &RepFlags, const FFieldNetCache *FieldCache, ESkipRpcBehavior SkipRpcBehavior)
Definition DataReplication.cpp:1319
ENGINE_API ~FObjectReplicator()
Definition DataReplication.cpp:346
ENGINE_API bool ReceivedBunch(FNetBitReader &Bunch, const FReplicationFlags &RepFlags, const bool bHasRepLayout, bool &bOutHasUnmapped)
Definition DataReplication.cpp:980
void PreNetReceive()
Definition DataReplication.h:253
ENGINE_API FObjectReplicator()
Definition DataReplication.cpp:329
TUniquePtr< FRepState > RepState
Definition DataReplication.h:334
ENGINE_API bool ValidateAgainstState(const UObject *ObjectState)
Definition DataReplication.cpp:477
ENGINE_API void WritePropertyHeaderAndPayload(UObject *Object, FProperty *Property, FNetFieldExportGroup *NetFieldExportGroup, FNetBitWriter &Bunch, FNetBitWriter &Payload) const
Definition DataReplication.cpp:2761
TUniquePtr< FRepState > CheckpointRepState
Definition DataReplication.h:335
void ResetReplayDirtyTracking()
Definition DataReplication.h:291
ENGINE_API void InitWithObject(UObject *InObject, UNetConnection *InConnection, bool bUseDefaultState=true)
Definition DataReplication.cpp:516
TWeakObjectPtr< UObject > GetWeakObjectPtr() const
Definition DataReplication.h:231
int32 TrackedGuidMemoryBytes
Definition DataReplication.h:299
uint32 bHasReplicatedProperties
Definition DataReplication.h:311
ENGINE_API void ReplicateCustomDeltaProperties(FNetBitWriter &Bunch, FReplicationFlags RepFlags, bool &bSkippedPropertyCondition)
Definition DataReplication.cpp:1641
ESkipRpcBehavior
Definition DataReplication.h:78
uint32 bOpenAckCalled
Definition DataReplication.h:305
ENGINE_API void PostReceivedBunch()
Definition DataReplication.cpp:1587
bool IsDirtyForReplay() const
Definition DataReplication.h:290
ENGINE_API void ReceivedNak(int32 NakPacketId)
Definition DataReplication.cpp:884
ENGINE_API void ForceRefreshUnreliableProperties()
Definition DataReplication.cpp:2121
ENGINE_API bool CanSkipUpdate(FReplicationFlags Flags)
Definition DataReplication.cpp:1822
UNetConnection * Connection
Definition DataReplication.h:342
ENGINE_API bool ReplicateProperties_r(FOutBunch &Bunch, FReplicationFlags RepFlags, FNetBitWriter &Writer)
Definition DataReplication.cpp:1922
bool ReceivedRPC(FNetBitReader &Reader, const FReplicationFlags &RepFlags, const FFieldNetCache *FieldCache, const bool bCanDelayRPC, bool &bOutDelayRPC, TSet< FNetworkGUID > &OutUnmappedGuids)
Definition DataReplication.h:198
ENGINE_API void QueueRemoteFunctionBunch(UFunction *Func, FOutBunch &Bunch)
Definition DataReplication.cpp:2288
ENGINE_API void CleanUp()
Definition DataReplication.cpp:590
TSharedPtr< FRepLayout > RepLayout
Definition DataReplication.h:333
uint32 bLastUpdateEmpty
Definition DataReplication.h:302
UObject * ObjectPtr
Definition DataReplication.h:339
ENGINE_API bool MoveMappedObjectToUnmapped(const FNetworkGUID &GUID)
Definition DataReplication.cpp:1560
ENGINE_API void StartReplicating(class UActorChannel *InActorChannel)
Definition DataReplication.cpp:640
void SetObject(UObject *NewObj)
Definition DataReplication.h:242
uint32 bForceUpdateUnmapped
Definition DataReplication.h:308
ENGINE_API bool ReplicateProperties(FOutBunch &Bunch, FReplicationFlags RepFlags)
Definition DataReplication.cpp:1914
ENGINE_API void StartBecomingDormant()
Definition DataReplication.cpp:2415
ENGINE_API void StopReplicating(class UActorChannel *InActorChannel)
Definition DataReplication.cpp:748
ENGINE_API void PostSendBunch(FPacketIdRange &PacketRange, uint8 bReliable)
Definition DataReplication.cpp:2139
TSharedPtr< class FReplicationChangelistMgr > ChangelistMgr
Definition DataReplication.h:332
ENGINE_API void InitRecentProperties(uint8 *Source)
Definition DataReplication.cpp:392
ENGINE_API void CallRepNotifies(bool bSkipIfChannelHasQueuedBunches) const
Definition DataReplication.cpp:2426
ENGINE_API bool SendCustomDeltaProperty(UObject *InObject, uint16 CustomDeltaProperty, FNetBitWriter &OutBunch, TSharedPtr< INetDeltaBaseState > &NewFullState, TSharedPtr< INetDeltaBaseState > &OldState)
Definition DataReplication.cpp:351
ENGINE_API void UpdateGuidToReplicatorMap()
Definition DataReplication.cpp:1483
void ReleaseStrongReference()
Definition DataReplication.h:248
ENGINE_API void QueuePropertyRepNotify(UObject *Object, FProperty *Property, const int32 ElementIndex, TArray< uint8 > &MetaData)
Definition DataReplication.cpp:2709
TArray< FRPCPendingLocalCall > PendingLocalRPCs
Definition DataReplication.h:353
ENGINE_API void ExecutePendingTransactionalRPCs()
Definition DataReplication.cpp:2626
FOutBunch * RemoteFunctions
Definition DataReplication.h:347
ENGINE_API bool ReadyForDormancy(bool bDebug=false)
Definition DataReplication.cpp:2362
uint32 bSentSubObjectCreation
Definition DataReplication.h:314
ENGINE_API void UpdateUnmappedObjects(bool &bOutHasMoreUnmapped)
Definition DataReplication.cpp:2456
TObjectPtr< UClass > ObjectClass
Definition DataReplication.h:337
ENGINE_API void CountBytes(FArchive &Ar) const
Definition DataReplication.cpp:2250
class UActorChannel * OwningChannel
Definition DataReplication.h:345
Definition DataBunch.h:24
Definition UnrealType.h:174
Definition RepLayout.h:434
Definition RepLayout.h:1174
Definition RepLayout.h:672
Definition DataReplication.h:374
FScopedActorRoleSwap & operator=(FScopedActorRoleSwap &&Other)
Definition DataReplication.h:387
FScopedActorRoleSwap(FScopedActorRoleSwap &&Other)
Definition DataReplication.h:382
FScopedActorRoleSwap(const FScopedActorRoleSwap &)=delete
ENGINE_API ~FScopedActorRoleSwap()
Definition DataReplication.cpp:2803
FScopedActorRoleSwap & operator=(const FScopedActorRoleSwap &)=delete
Definition RepLayout.h:568
Definition UnrealType.h:6306
Definition Array.h:670
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition ActorChannel.h:78
Definition Class.h:2476
Definition NetConnection.h:284
Definition NetDriver.h:799
Definition Object.h:95
Definition DataReplication.h:93
int32 Calls
Definition DataReplication.h:95
FName FuncName
Definition DataReplication.h:94
double LastCallTimestamp
Definition DataReplication.h:96
Definition DataReplication.h:100
TArray< uint8 > Buffer
Definition DataReplication.h:108
void CountBytes(FArchive &Ar) const
Definition DataReplication.cpp:2244
FRPCPendingLocalCall(const FFieldNetCache *InRPCField, const FReplicationFlags &InRepFlags, FNetBitReader &InReader, uint32 InReplicationFrame, const TSet< FNetworkGUID > &InUnmappedGuids)
Definition DataReplication.h:119
int64 NumBits
Definition DataReplication.h:111
int32 RPCFieldIndex
Definition DataReplication.h:102
uint32 FrameQueuedAt
Definition DataReplication.h:114
TSet< FNetworkGUID > UnmappedGuids
Definition DataReplication.h:117
FReplicationFlags RepFlags
Definition DataReplication.h:105
Definition CoreNet.h:259
Definition DataReplication.h:42
const class FObjectPropertyBase * Property
Definition DataReplication.h:47
FReplicatedActorProperty(int32 InOffset, const FObjectPropertyBase *InProperty)
Definition DataReplication.h:49
int32 Offset
Definition DataReplication.h:44
Definition EngineTypes.h:3601
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132