UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetObjectCountLimiter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8#include "NetObjectCountLimiter.generated.h"
9
10UENUM()
25
26//TODO $IRIS: Document class usage
27UCLASS(transient, config=Engine, MinimalAPI)
29{
31
32public:
33 UPROPERTY()
35
42 UPROPERTY(Config)
43 uint32 MaxObjectCount = 2;
44
50 UPROPERTY(Config)
51 float Priority = 1.0f;
52
56 UPROPERTY(Config)
57 float OwningConnectionPriority = 1.0f;
58
63 UPROPERTY(Config)
64 bool bEnableOwnedObjectsFastLane = true;
65};
66
67UCLASS()
69{
71
72protected:
73 // UNetObjectPrioritizer interface
75 IRISCORE_API virtual void Deinit() override;
77 IRISCORE_API virtual void AddConnection(uint32 ConnectionId) override;
78 IRISCORE_API virtual void RemoveConnection(uint32 ConnectionId) override;
79 IRISCORE_API virtual bool AddObject(uint32 ObjectIndex, FNetObjectPrioritizerAddObjectParams&) override;
80 IRISCORE_API virtual void RemoveObject(uint32 ObjectIndex, const FNetObjectPrioritizationInfo&) override;
81 IRISCORE_API virtual void UpdateObjects(FNetObjectPrioritizerUpdateParams&) override;
82 IRISCORE_API virtual void PrePrioritize(FNetObjectPrePrioritizationParams&) override;
83 IRISCORE_API virtual void Prioritize(FNetObjectPrioritizationParams&) override;
84
85protected:
87 {
89 uint16 GetPrioritizerInternalIndex() const { return Data[0]; }
90
91 void SetOwningConnection(uint32 ConnectionId) { Data[1] = static_cast<uint16>(ConnectionId); }
92 uint32 GetOwningConnection() const { return static_cast<uint32>(Data[1]); }
93 };
94
96 {
97 // Which frame was this object last considered for replication for this connection
99 };
100
107
108protected:
110
111 IRISCORE_API uint32 GetLastConsiderFrame(uint32 ConnectionId, uint32 ObjectIndex) const;
112 IRISCORE_API void SetLastConsiderFrame(uint32 ConnectionId, uint32 ObjectIndex, uint32 FrameNumber);
113
114private:
115 enum : unsigned
116 {
117 // Keep the ObjectGrowCount fairly low as allocation size = ObjectGrowCount * max number of connections * size for per object info
118 ObjectGrowCount = 64U,
119 };
120
121 struct FRoundRobinState
122 {
123 UE::Net::FNetBitArray InternalObjectIndices;
124 uint16 NextIndexToConsider = 0;
125 };
126
127 struct FFillState
128 {
129 uint32 LastPrioFrame = 0;
130 uint32 LastConnectionId = 0;
131 };
132
133 uint16 AllocInternalIndex();
134 void FreeInternalIndex(uint16 Index);
135 void PrePrioritizeForRoundRobin();
136 void PrioritizeForRoundRobin(FNetObjectPrioritizationParams&) const;
137 void PrioritizeForFill(FNetObjectPrioritizationParams&);
138
139private:
140 TObjectPtr<const UReplicationSystem> ReplicationSystem;
142 TArray<FPerConnectionInfo> PerConnectionInfos;
143 UE::Net::FNetBitArray InternalObjectIndices;
144 FRoundRobinState RoundRobinState;
145 FFillState FillState;
146 uint32 PrioFrame;
147 uint32 ReplicationSystemId;
148};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
void Init()
Definition LockFreeList.h:4
ENetObjectCountLimiterMode
Definition NetObjectCountLimiter.h:12
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Engine.Build.cs:7
Definition Array.h:670
Definition StrongObjectPtrTemplates.h:26
Definition NetBitArray.h:74
Definition NetObjectCountLimiter.h:29
Definition NetObjectCountLimiter.h:69
IRISCORE_API void SetLastConsiderFrame(uint32 ConnectionId, uint32 ObjectIndex, uint32 FrameNumber)
IRISCORE_API uint32 GetLastConsiderFrame(uint32 ConnectionId, uint32 ObjectIndex) const
virtual void OnMaxInternalNetRefIndexIncreased(uint32 NewMaxInternalIndex) override
Definition NetObjectCountLimiter.h:76
Definition NetObjectPrioritizer.h:92
Definition NetObjectPrioritizer.h:158
@ Config
Property should be loaded/saved to ini file as permanent profile.
Definition ObjectMacros.h:1053
U16 Index
Definition radfft.cpp:71
Definition NetObjectPrioritizer.h:69
Definition NetObjectPrioritizer.h:82
Definition NetObjectPrioritizer.h:44
Definition NetObjectPrioritizer.h:113
Definition NetObjectPrioritizer.h:98
Definition NetObjectPrioritizer.h:133
Definition ObjectPtr.h:488
Definition NetObjectCountLimiter.h:102
uint32 ObjectCount
Definition NetObjectCountLimiter.h:104
uint32 ConnectionId
Definition NetObjectCountLimiter.h:103
float * Priorities
Definition NetObjectCountLimiter.h:105
Definition NetObjectCountLimiter.h:87
void SetOwningConnection(uint32 ConnectionId)
Definition NetObjectCountLimiter.h:91
void SetPrioritizerInternalIndex(uint16 Index)
Definition NetObjectCountLimiter.h:88
uint32 GetOwningConnection() const
Definition NetObjectCountLimiter.h:92
uint16 GetPrioritizerInternalIndex() const
Definition NetObjectCountLimiter.h:89
Definition NetObjectCountLimiter.h:96
TArray< uint32 > LastConsiderFrames
Definition NetObjectCountLimiter.h:98