13#include "Containers/Array.h"
152 struct FPerConnectionInfo
171 FNetBitArray DynamicFilteredOutObjectsHysteresisAdjusted;
176 struct FPerObjectInfo
182 static constexpr uint32 UsedPerObjectInfoStorageGrowSize = 32;
183 typedef uint32 PerObjectInfoIndexType;
187 PerObjectInfoIndexType ConnectionStateIndex;
190 class FPerSubObjectFilterGroupInfo
194 FSharedConnectionFilterStatusCollection ConnectionFilterStatus;
196 PerObjectInfoIndexType ConnectionStateIndex = 0;
207 class FUpdateDirtyObjectsBatchHelper;
208 friend FNetObjectFilteringInfoAccessor;
209 friend FPerSubObjectFilterGroupInfo;
211 static void StaticChecks();
214 void InitObjectScopeHysteresis();
219 void InitNewConnections();
220 void ResetRemovedConnections();
221 void UpdateObjectsInScope();
222 void UpdateOwnerFiltering();
223 void UpdateGroupExclusionFiltering();
224 void UpdateGroupInclusionFiltering();
225 void UpdateSubObjectFilters();
227 void UpdateDynamicFilters();
228 void PreUpdateDynamicFiltering();
229 void UpdateDynamicFiltering();
230 void PostUpdateDynamicFiltering();
232 void PreUpdateObjectScopeHysteresis();
233 void PostUpdateObjectScopeHysteresis();
234 void ClearObjectsFromHysteresis();
237 void FilterNonRelevantObjects();
239 bool HasDynamicFilters()
const;
241 void UpdateCreationDependentParent(
uint32 ChildIndex,
const FNetBitArrayView ObjectsWithCreationDependencies, FNetBitArrayView
OutConnectionObjectsInScope,
bool bIsRecursive)
const;
244 bool ClearGroupExclusionFilterEffectsForObject(
uint32 ObjectIndex,
uint32 ConnectionId);
246 bool ClearGroupInclusionFilterEffectsForObject(
uint32 ObjectIndex,
uint32 ConnectionId);
247 bool HasOwnerFilter(
uint32 ObjectIndex)
const;
249 PerObjectInfoIndexType AllocPerObjectInfo();
250 void FreePerObjectInfo(PerObjectInfoIndexType
Index);
252 FPerObjectInfo* AllocPerObjectInfoForObject(
uint32 ObjectIndex);
253 void FreePerObjectInfoForObject(
uint32 ObjectIndex);
255 FPerObjectInfo* GetPerObjectInfo(PerObjectInfoIndexType
Index);
256 const FPerObjectInfo* GetPerObjectInfo(PerObjectInfoIndexType
Index)
const;
267 bool IsAnyConnectionFilterStatusAllowed(
const FPerObjectInfo& ObjectInfo)
const;
268 bool IsAnyConnectionFilterStatusDisallowed(
const FPerObjectInfo& ObjectInfo)
const;
278 uint32 GetOwningConnectionIfDirty(
uint32 ObjectIndex)
const;
282 void NotifyFiltersOfDirtyObjects();
283 void BatchNotifyFiltersOfDirtyObjects(FUpdateDirtyObjectsBatchHelper&
BatchHelper,
const uint32* ObjectIndices,
uint32 ObjectCount);
288 uint8 GetObjectScopeHysteresisFrameCount(
FName Profile)
const;
290 bool HasSubObjectInScopeWithFilteredOutRootObject(FNetBitArrayView Objects)
const;
294 enum EHysteresisProcessingMode :
uint32
301 struct FObjectScopeHysteresisState
307 EHysteresisProcessingMode
Mode = EHysteresisProcessingMode::Disabled;
309 uint32 ConnectionStartId = 0;
311 uint32 ConnectionIdStride = 1;
314 uint32 ObjectsToClearCount = 0;
317 FNetBitArray ObjectsToClear;
320 FNetBitArray ObjectsExemptFromHysteresis;
324 static constexpr uint8 InvalidDynamicFilterIndex = 255U;
331 const FNetRefHandleManager* NetRefHandleManager =
nullptr;
335 FNetObjectGroups* Groups =
nullptr;
338 FReplicationConnections* Connections =
nullptr;
340 FNetBitArray ValidConnections;
341 FNetBitArray NewConnections;
345 uint32 WordCountForObjectBitArrays = 0;
348 FNetBitArray ObjectsWithDirtyOwnerFilter;
349 FNetBitArray ObjectsWithDirtyOwner;
351 FNetBitArray ObjectsWithOwnerFilter;
362 FNetBitArray ObjectsWithPerObjectInfo;
375 FNetBitArray ExclusionFilterGroups;
378 FNetBitArray InclusionFilterGroups;
381 FNetBitArray DirtyExclusionFilterGroups;
384 FNetBitArray DirtyInclusionFilterGroups;
387 FNetBitArray SubObjectFilterGroups;
389 FNetBitArray DirtySubObjectFilterGroups;
391 FNetBitArray AllConnectionFilteredObjects;
394 uint32 PerObjectInfoStorageCountForConnections = 0;
396 uint32 PerObjectInfoStorageCountPerItem = 0;
403 FNetBitArray DynamicFilterEnabledObjects;
404 FNetBitArray ObjectsRequiringDynamicFilterUpdate;
407 FObjectScopeHysteresisState HysteresisState;
409 uint32 bHasNewConnection : 1;
410 uint32 bHasRemovedConnection : 1;
411 uint32 bHasDirtyOwnerFilter: 1;
412 uint32 bHasDirtyOwner : 1;
413 uint32 bHasDynamicFilters : 1;
414 uint32 bHasDirtyExclusionFilterGroup : 1;
415 uint32 bHasDirtyInclusionFilterGroup : 1;
417 uint32 bHasDynamicFiltersWithUpdateTrait : 1;
420inline bool FReplicationFiltering::HasDynamicFilters()
const
422 return bHasDynamicFilters;
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
Definition NameTypes.h:617
Definition ArrayView.h:139
Definition UnrealString.h.inl:34
Definition StrongObjectPtrTemplates.h:26
Definition ConnectionHandle.h:17
Definition NetBitArray.h:337
Definition NetBitArray.h:74
bool GetBit(uint32 Index) const
Definition NetBitArray.h:1253
Definition NetObjectGroupHandle.h:22
uint32 FGroupIndexType
Definition NetObjectGroupHandle.h:24
FGroupIndexType GetGroupIndex() const
Definition NetObjectGroupHandle.h:49
bool IsValid() const
Definition NetObjectGroupHandle.h:46
Definition ReplicationFiltering.h:34
Definition NetObjectGroups.h:52
Definition NetRefHandleManager.h:72
Definition ObjectScopeHysteresisUpdater.h:19
Definition ReplicationConnections.h:32
Definition ReplicationFiltering.h:56
void RemoveGroupFilter(FNetObjectGroupHandle GroupHandle)
Definition ReplicationFiltering.cpp:2042
bool AddInclusionFilterGroup(FNetObjectGroupHandle GroupHandle)
Definition ReplicationFiltering.cpp:2011
void BuildAlwaysRelevantList(FNetBitArrayView OutAlwaysRelevantList, const FNetBitArrayView ScopeList) const
Definition ReplicationFiltering.cpp:409
void NotifyRemovedDependentObject(FInternalNetRefIndex ObjectIndex)
Definition ReplicationFiltering.cpp:2558
uint32 GetOwningConnection(FInternalNetRefIndex ObjectIndex) const
Definition ReplicationFiltering.h:89
bool IsExclusionFilterGroup(FNetObjectGroupHandle GroupHandle) const
Definition ReplicationFiltering.h:126
void NotifyObjectRemovedFromGroup(FNetObjectGroupHandle GroupHandle, FInternalNetRefIndex ObjectIndex)
Definition ReplicationFiltering.cpp:2499
void RemoveConnection(uint32 ConnectionId)
Definition ReplicationFiltering.cpp:642
bool IsUsingSpatialFilter(FInternalNetRefIndex ObjectIndex) const
Definition ReplicationFiltering.cpp:575
void SetOwningConnection(FInternalNetRefIndex ObjectIndex, uint32 ConnectionId)
Definition ReplicationFiltering.cpp:442
void RemoveSubObjectFilter(FNetObjectGroupHandle GroupHandle)
Definition ReplicationFiltering.cpp:1897
FNetObjectFilterHandle GetFilterHandle(const FName FilterName) const
Definition ReplicationFiltering.cpp:588
void AddConnection(uint32 ConnectionId)
Definition ReplicationFiltering.cpp:626
void NotifyAddedDependentObject(FInternalNetRefIndex ObjectIndex)
Definition ReplicationFiltering.cpp:2543
bool GetGroupFilterStatus(FNetObjectGroupHandle GroupHandle, uint32 ConnectionId, ENetFilterStatus &OutReplicationStatus) const
Definition ReplicationFiltering.cpp:2450
bool IsInclusionFilterGroup(FNetObjectGroupHandle GroupHandle) const
Definition ReplicationFiltering.h:127
void NotifyObjectAddedToGroup(FNetObjectGroupHandle GroupHandle, FInternalNetRefIndex ObjectIndex)
Definition ReplicationFiltering.cpp:2463
void OnMaxInternalNetRefIndexIncreased(FInternalNetRefIndex NewMaxInternalIndex)
Definition ReplicationFiltering.cpp:292
void SetSubObjectFilterStatus(FNetObjectGroupHandle GroupHandle, FConnectionHandle ConnectionHandle, ENetFilterStatus ReplicationStatus)
Definition ReplicationFiltering.cpp:1936
void OnInternalNetRefIndicesFreed(const TConstArrayView< FInternalNetRefIndex > &FreedIndices)
Definition ReplicationFiltering.cpp:321
void SetGroupFilterStatus(FNetObjectGroupHandle GroupHandle, ENetFilterStatus ReplicationStatus)
Definition ReplicationFiltering.cpp:2089
void AddSubObjectFilter(FNetObjectGroupHandle GroupHandle)
Definition ReplicationFiltering.cpp:1873
FReplicationFiltering()
Definition ReplicationFiltering.cpp:173
void Filter()
Definition ReplicationFiltering.cpp:330
bool SetFilter(FInternalNetRefIndex ObjectIndex, FNetObjectFilterHandle Filter, FName FilterConfigProfile)
Definition ReplicationFiltering.cpp:465
bool GetSubObjectFilterStatus(FNetObjectGroupHandle GroupHandle, uint32 ParentConnectionId, ENetFilterStatus &OutReplicationStatus) const
Definition ReplicationFiltering.cpp:1961
FName GetFilterName(FNetObjectFilterHandle Filter) const
Definition ReplicationFiltering.cpp:614
bool IsSubObjectFilterGroup(FNetObjectGroupHandle GroupHandle) const
Definition ReplicationFiltering.h:143
const FNetBitArrayView GetRelevantObjectsInScope(uint32 ConnectionId) const
Definition ReplicationFiltering.h:77
bool AddExclusionFilterGroup(FNetObjectGroupHandle GroupHandle)
Definition ReplicationFiltering.cpp:1980
UNetObjectFilter * GetFilter(const FName FilterName) const
Definition ReplicationFiltering.cpp:601
void BuildObjectsInFilterList(FNetBitArrayView OutObjectsInFilter, FName FilterName) const
Definition ReplicationFiltering.cpp:2805
void Deinit()
Definition ReplicationFiltering.cpp:237
const FNetBitArrayView GetGroupFilteredOutObjects(uint32 ConnectionId) const
Definition ReplicationFiltering.h:82
FString PrintFilterObjectInfo(FInternalNetRefIndex ObjectIndex, uint32 ConnectionId) const
Definition ReplicationFiltering.cpp:2708
Definition NetObjectFilter.h:178
Definition ReplicationFilteringConfig.h:48
Definition ReplicationSystem.h:70
Mode
Definition AnimNode_TransitionPoseEvaluator.h:28
const TCHAR * Name
Definition OodleDataCompression.cpp:30
Definition OverriddenPropertySet.cpp:45
Definition NetworkVersion.cpp:28
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
Definition NetworkVersion.cpp:28
uint32 FNetObjectFilterHandle
Definition ReplicationFiltering.h:20
FNetBitArrayView MakeNetBitArrayView(const FNetBitArrayView::StorageWordType *Storage, uint32 BitCount)
Definition NetBitArray.h:1677
ENetFilterStatus
Definition NetObjectFilter.h:37
U16 Index
Definition radfft.cpp:71
Definition ObjectPtr.h:488
Definition ReplicationFiltering.h:46
uint32 MaxGroupCount
Definition ReplicationFiltering.h:52
TObjectPtr< UReplicationSystem > ReplicationSystem
Definition ReplicationFiltering.h:47
FNetObjectGroups * Groups
Definition ReplicationFiltering.h:49
const FNetRefHandleManager * NetRefHandleManager
Definition ReplicationFiltering.h:48
FInternalNetRefIndex MaxInternalNetRefIndex
Definition ReplicationFiltering.h:51
FReplicationConnections * Connections
Definition ReplicationFiltering.h:50