UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetworkObjectList.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7
8class AActor;
9class FArchive;
10
11#ifndef UE_REPLICATED_OBJECT_REFCOUNTING
12 // Allows every network actor to keep track of the number of channels an individual subobject was replicated.
13 // Not needed on clients so its compiled out to reduce memory usage.
14 #define UE_REPLICATED_OBJECT_REFCOUNTING WITH_SERVER_CODE
15#endif
16
17#ifndef DO_REPLICATED_OBJECT_CHANNELREF_CHECKS
18 // Run additional code to validate any errors in the SubObject channel refcounting at the cost of extra memory usage and cpu overhead.
19 #define DO_REPLICATED_OBJECT_CHANNELREF_CHECKS (UE_REPLICATED_OBJECT_REFCOUNTING && WITH_SERVER_CODE && UE_BUILD_DEVELOPMENT)
20#endif
21
24{
25 Active, // The subobject is active and replicated
26 TearOff, // The subobject should be torn off on the clients
27 Delete, // The subobject should be deleted on the clients
28};
29
35{
38
41
44
47
50
54
55
59 struct FNetConnectionKeyFuncs : BaseKeyFuncs<TWeakObjectPtr<UNetConnection>, const TWeakObjectPtr<UNetConnection>&, false>
60 {
61 static KeyInitType GetSetKey(ElementInitType& Element) { return Element; }
62 static bool Matches(KeyInitType A, KeyInitType B) { return A.HasSameIndexAndSerialNumber(B); }
63 static uint32 GetKeyHash(KeyInitType Key) { return GetTypeHash(Key); }
64 };
65
68
74
77
80
83
86
96
107
108 void CountBytes(FArchive& Ar) const;
109};
110
114struct FNetworkObjectKeyFuncs : BaseKeyFuncs<TSharedPtr<FNetworkObjectInfo>, AActor*, false>
115{
120 {
121 return Element.Get()->Actor;
122 }
123
128 {
129 return A == B;
130 }
131
134 {
135 return GetTypeHash(Key);
136 }
137};
138
143{
144public:
146
155 ENGINE_API void AddInitialObjects(UWorld* const World, UNetDriver* NetDriver);
156
167
175 {
176 return const_cast<FNetworkObjectList*>(this)->Find(const_cast<AActor* const>(Actor));
177 }
178
180 ENGINE_API void Remove(AActor* const Actor);
181
183 ENGINE_API void MarkDormant(AActor* const Actor, UNetConnection* const Connection, const int32 NumConnections, UNetDriver* NetDriver);
184
186 ENGINE_API bool MarkActive(AActor* const Actor, UNetConnection* const Connection, UNetDriver* NetDriver);
187
190
192
194 ENGINE_API void ClearRecentlyDormantConnection(AActor* const Actor, UNetConnection* const Connection, UNetDriver* NetDriver);
195
198
201
208
211
213 const FNetworkObjectSet& GetAllObjects() const { return AllNetworkObjects; }
214
216 const FNetworkObjectSet& GetActiveObjects() const { return ActiveNetworkObjects; }
217
219 const FNetworkObjectSet& GetDormantObjectsOnAllConnections() const { return ObjectsDormantOnAllConnections; }
220
222
225
226 ENGINE_API void Reset();
227
228 ENGINE_API void CountBytes(FArchive& Ar) const;
229
231 ENGINE_API void FlushDormantActors(UNetConnection* const Connection, const FName& PackageName);
232
235
236#if UE_REPLICATED_OBJECT_REFCOUNTING
237
240
243
249
252
255
258
261
263
265 ENGINE_API FNetworkObjectList::FActorInvalidSubObjectView FindActorInvalidSubObjects(AActor* OwnerActor) const;
266
272#if DO_REPLICATED_OBJECT_CHANNELREF_CHECKS
275#endif
276
277#endif //#if UE_REPLICATED_OBJECT_REFCOUNTING
278
279private:
280 ENGINE_API bool MarkActiveInternal(const TSharedPtr<FNetworkObjectInfo>& ObjectInfo, UNetConnection* const Connection, UNetDriver* NetDriver);
281
282#if UE_REPLICATED_OBJECT_REFCOUNTING
284
289#endif
290
291#if DO_REPLICATED_OBJECT_CHANNELREF_CHECKS
293#endif
294
295 FNetworkObjectSet AllNetworkObjects;
296 FNetworkObjectSet ActiveNetworkObjects;
297 FNetworkObjectSet ObjectsDormantOnAllConnections;
298
300 FNetworkObjectSet SeamlessTravelingObjects;
301
302 TMap<TWeakObjectPtr<UNetConnection>, int32 > NumDormantObjectsPerConnection;
303
304 TMap<FName, FNetworkObjectSet> FullyDormantObjectsByLevel;
306
307public:
308
352
354 struct FSubObjectChannelRefKeyFuncs : BaseKeyFuncs<FSubObjectChannelReference, const TWeakObjectPtr<UObject>&, false>
355 {
356 static KeyInitType GetSetKey(ElementInitType& Element) { return Element.SubObjectPtr; }
357 static bool Matches(KeyInitType A, KeyInitType B) { return A.HasSameIndexAndSerialNumber(B); }
358 static uint32 GetKeyHash(KeyInitType Key) { return GetTypeHash(Key); }
359 };
360
361#if UE_REPLICATED_OBJECT_REFCOUNTING
362
365 {
366 public:
370 { }
371
373
374 inline uint16 GetDirtyCount() const { return InvalidSubObjectDirtyCount; }
375 inline bool HasInvalidSubObjects() const { return InvalidSubObjectsPtr != nullptr; }
377 {
379 return *InvalidSubObjectsPtr;
380 }
381
382 private:
385
388 };
389
390private:
391
393 {
396
399
402
408
410
412 bool HasNoSubObjects() const
413 {
415 }
416
417 void CountBytes(FArchive& Ar) const;
418 };
419
421 struct FActorSubObjectRefKeyFuncs : BaseKeyFuncs<FActorSubObjectReferences, FObjectKey, false>
422 {
423 static KeyInitType GetSetKey(ElementInitType& Element) { return Element.ActorKey; }
424 static bool Matches(KeyInitType A, KeyInitType B) { return A == B; }
425 static uint32 GetKeyHash(KeyInitType Key) { return GetTypeHash(Key); }
426 };
427
428private:
429
432
433#endif //UE_REPLICATED_OBJECT_REFCOUNTING
434};
#define check(expr)
Definition AssertionMacros.h:314
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
ENetSubObjectStatus
Definition NetworkObjectList.h:24
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 NameTypes.h:617
Definition NetworkObjectList.h:143
ENGINE_API void OnActorIsTraveling(AActor *TravelingAtor)
Definition NetworkObjectList.cpp:424
const FNetworkObjectSet & GetActiveObjects() const
Definition NetworkObjectList.h:216
ENGINE_API void Reset()
Definition NetworkObjectList.cpp:515
ENGINE_API void OnActorDestroyed(AActor *DestroyedActor)
Definition NetworkObjectList.cpp:612
ENGINE_API void FlushDormantActors(UNetConnection *const Connection, const FName &PackageName)
Definition NetworkObjectList.cpp:587
ENGINE_API void OnPostSeamlessTravel()
Definition NetworkObjectList.cpp:433
ENGINE_API void ClearRecentlyDormantConnection(AActor *const Actor, UNetConnection *const Connection, UNetDriver *NetDriver)
Definition NetworkObjectList.cpp:410
const TSharedPtr< FNetworkObjectInfo > Find(const AActor *const Actor) const
Definition NetworkObjectList.h:174
ENGINE_API void HandleConnectionAdded()
Definition NetworkObjectList.cpp:461
ENGINE_API void MarkDirtyForReplay(AActor *const Actor)
Definition NetworkObjectList.cpp:385
TSet< TSharedPtr< FNetworkObjectInfo >, FNetworkObjectKeyFuncs > FNetworkObjectSet
Definition NetworkObjectList.h:145
ENGINE_API void ResetDormancyState()
Definition NetworkObjectList.cpp:474
ENGINE_API void CountBytes(FArchive &Ar) const
Definition NetworkObjectList.cpp:534
ENGINE_API void MarkDormant(AActor *const Actor, UNetConnection *const Connection, const int32 NumConnections, UNetDriver *NetDriver)
Definition NetworkObjectList.cpp:205
const FNetworkObjectSet & GetAllObjects() const
Definition NetworkObjectList.h:213
ENGINE_API TSharedPtr< FNetworkObjectInfo > * FindOrAdd(AActor *const Actor, UNetDriver *NetDriver, bool *OutWasAdded=nullptr)
Definition NetworkObjectList.cpp:77
ENGINE_API bool MarkActive(AActor *const Actor, UNetConnection *const Connection, UNetDriver *NetDriver)
Definition NetworkObjectList.cpp:373
ENGINE_API int32 GetNumDormantActorsForConnection(UNetConnection *const Connection) const
Definition NetworkObjectList.cpp:494
ENGINE_API void ForceActorRelevantNextUpdate(AActor *const Actor, UNetDriver *NetDriver)
Definition NetworkObjectList.cpp:501
ENGINE_API void ResetReplayDirtyTracking()
Definition NetworkObjectList.cpp:399
const FNetworkObjectSet & GetDormantObjectsOnAllConnections() const
Definition NetworkObjectList.h:219
ENGINE_API void AddInitialObjects(UWorld *const World, UNetDriver *NetDriver)
Definition NetworkObjectList.cpp:39
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition ActorChannel.h:78
Definition NetConnection.h:284
Definition NetDriver.h:799
Definition Object.h:95
Definition World.h:918
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
@ Element
Definition Visu.h:18
VERSECOMPILER_API bool Matches(const CTypeBase *PositiveType1, const CTypeBase *NegativeType2, const uint32_t UploadedAtFnVersion)
Determine if argument PositiveType1 is a match for parameter NegativeType2
Definition SemanticTypes.cpp:2971
@ false
Definition radaudio_common.h:23
Definition SetUtilities.h:23
TCallTraits< TWeakObjectPtr< UNetConnection > >::ParamType ElementInitType
Definition SetUtilities.h:26
TCallTraits< const TWeakObjectPtr< UNetConnection > & >::ParamType KeyInitType
Definition SetUtilities.h:25
Definition NetworkObjectList.h:60
static uint32 GetKeyHash(KeyInitType Key)
Definition NetworkObjectList.h:63
static bool Matches(KeyInitType A, KeyInitType B)
Definition NetworkObjectList.h:62
static KeyInitType GetSetKey(ElementInitType &Element)
Definition NetworkObjectList.h:61
Definition NetworkObjectList.h:35
uint8 bDirtyForReplay
Definition NetworkObjectList.h:79
uint32 ForceRelevantFrame
Definition NetworkObjectList.h:85
TWeakObjectPtr< AActor > WeakActor
Definition NetworkObjectList.h:40
void CountBytes(FArchive &Ar) const
Definition NetworkObjectList.cpp:526
double NextUpdateTime
Definition NetworkObjectList.h:43
uint8 bSwapRolesOnReplicate
Definition NetworkObjectList.h:82
double LastNetUpdateTimestamp
Definition NetworkObjectList.h:53
uint8 bPendingNetUpdate
Definition NetworkObjectList.h:76
float OptimalNetUpdateDelta
Definition NetworkObjectList.h:49
FNetworkObjectInfo(AActor *InActor)
Definition NetworkObjectList.h:97
TSet< TWeakObjectPtr< UNetConnection >, FNetConnectionKeyFuncs > RecentlyDormantConnections
Definition NetworkObjectList.h:73
FNetworkObjectInfo()
Definition NetworkObjectList.h:87
TSet< TWeakObjectPtr< UNetConnection >, FNetConnectionKeyFuncs > DormantConnections
Definition NetworkObjectList.h:67
AActor * Actor
Definition NetworkObjectList.h:37
double LastNetReplicateTime
Definition NetworkObjectList.h:46
Definition NetworkObjectList.h:115
static bool Matches(KeyInitType A, KeyInitType B)
Definition NetworkObjectList.h:127
static KeyInitType GetSetKey(ElementInitType Element)
Definition NetworkObjectList.h:119
static uint32 GetKeyHash(KeyInitType Key)
Definition NetworkObjectList.h:133
Definition NetworkObjectList.h:355
static uint32 GetKeyHash(KeyInitType Key)
Definition NetworkObjectList.h:358
static KeyInitType GetSetKey(ElementInitType &Element)
Definition NetworkObjectList.h:356
static bool Matches(KeyInitType A, KeyInitType B)
Definition NetworkObjectList.h:357
Definition NetworkObjectList.h:314
bool IsTearOff() const
Definition NetworkObjectList.h:340
friend uint32 GetTypeHash(const FSubObjectChannelReference &SubObjChannelRef)
Definition NetworkObjectList.h:335
TWeakObjectPtr< UObject > SubObjectPtr
Definition NetworkObjectList.h:316
bool operator==(const TWeakObjectPtr< UObject > &rhs) const
Definition NetworkObjectList.h:333
bool IsActive() const
Definition NetworkObjectList.h:342
bool IsDelete() const
Definition NetworkObjectList.h:341
bool operator==(const FSubObjectChannelReference &rhs) const
Definition NetworkObjectList.h:332
FSubObjectChannelReference(const TWeakObjectPtr< UObject > &InSubObject)
Definition NetworkObjectList.h:345
uint16 ChannelRefCount
Definition NetworkObjectList.h:319
ENetSubObjectStatus Status
Definition NetworkObjectList.h:322
Definition ObjectKey.h:19
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE bool HasSameIndexAndSerialNumber(const TWeakObjectPtr &Other) const
Definition WeakObjectPtrTemplates.h:273