18#include "Containers/Array.h"
19#include "Containers/Map.h"
21#include "Containers/Set.h"
32 class FNetBitStreamReader;
33 class FNetBitStreamWriter;
34 class FNetObjectAttachment;
35 class FNetSerializationContext;
36 struct FReplicationProtocol;
40 struct FChangeMaskCache;
41 class FNetRefHandleManager;
42 class FReliableNetBlobQueue;
43 class FReplicationConditionals;
44 class FReplicationFiltering;
45 class FReplicationSystemInternal;
46 class FDeltaCompressionBaselineManager;
47 class FDeltaCompressionBaseline;
93 static_assert((
uint8)(
EReplicatedObjectState::Count) <= 32,
"EReplicatedObjectState must fit in 5 bits. See FReplicationInfo::State and FReplicationRecord::FRecordInfo::ReplicatedObjectState members.");
148 static_assert(
sizeof(FReplicationInfo) == 16,
"Expected sizeof FReplicationInfo to be 16 bytes");
215 ObjectIndexForOOBAttachment = 0U,
221 struct FScheduleObjectInfo
230 FWriteContext() : bIsValid(0) {}
233 FNetBitArray ObjectsWrittenThisPacket;
237 FScheduleObjectInfo* ScheduledObjectInfos;
238 uint32 ScheduledObjectCount;
249 uint32 FailedToWriteSmallObjectCount;
252 uint32 WrittenDestroyObjectCount;
255 uint32 NumWrittenPacketsInThisBatch = 0U;
258 uint32 MaxPacketsToSend = 1U;
263 uint32 bIsInReplicationRecordStarvation : 1;
265 uint32 bHasDestroyedObjectsToSend : 1;
267 uint32 bHasUpdatedObjectsToSend : 1;
269 uint32 bHasHugeObjectToSend : 1;
271 uint32 bHasOOBAttachmentsToSend : 1;
280 struct FBatchObjectInfo
286 bool bHasUnsentAttachments;
287 uint32 NewBaselineIndex : 2;
288 uint32 bIsInitialState : 1;
290 uint32 bSentAttachments : 1;
291 uint32 bHasDirtySubObjects : 1;
293 uint32 bSentDestroySubObject : 1;
294 uint32 bSentBatchData : 1;
297 enum class EBatchInfoType :
uint32
310 uint32 ParentInternalIndex;
316 FReplicationRecord::FRecordInfo
Record;
326 struct FBitStreamInfo
328 uint32 ReplicationStartPos;
330 uint32 ReplicationCapacity;
333 enum class EHugeObjectSendStatus :
uint32
339 struct FHugeObjectContext
341 FHugeObjectContext();
342 ~FHugeObjectContext();
345 FBatchRecord BatchRecord;
346 FNetExportContext::FBatchExports BatchExports;
352 class FHugeObjectSendQueue
355 FHugeObjectSendQueue();
356 ~FHugeObjectSendQueue();
361 uint32 NumRootObjectsInTransit()
const;
364 bool EnqueueHugeObject(
const FHugeObjectContext&
Context);
399 enum EWriteObjectFlag :
unsigned
401 WriteObjectFlag_State = 1U,
402 WriteObjectFlag_Attachments = WriteObjectFlag_State << 1U,
403 WriteObjectFlag_HugeObject = WriteObjectFlag_Attachments << 1U,
404 WriteObjectFlag_IsWritingHugeObjectBatch = WriteObjectFlag_HugeObject << 1U,
407 enum class EWriteObjectRetryMode :
unsigned
417 enum class EWriteObjectStatus :
unsigned
443 uint32 GetDefaultFlushFlags()
const;
445 void SetPendingDestroyOrSubObjectPendingDestroyState(
uint32 Index, FReplicationInfo&
Info);
449 void GetInitialChangeMask(
ChangeMaskStorageType* ChangeMaskStorage,
const FReplicationProtocol* Protocol);
465 void WriteNetRefHandleId(FNetSerializationContext&
Context, FNetRefHandle RefHandle);
469 void CreateObjectRecord(
const FNetBitArrayView* ChangeMask,
const FReplicationInfo&
Info,
const FBatchObjectInfo& ObjectInfo, FObjectRecord&
OutRecord);
476 void CommitBatchRecord(
const FBatchRecord& BatchRecord);
486 void UpdateStreamDebugFeatures();
488 void WriteStreamDebugFeatures(FNetSerializationContext&
Context);
490 uint32 WriteObjectsPendingDestroy(FNetSerializationContext&
Context);
492 uint32 WriteObjectsAndSubObjectsPendingDestroy(FNetSerializationContext&
Context);
494 uint32 WriteRootObjectsPendingDestroy(FNetSerializationContext&
Context);
502 enum class EWriteStatus :
int32
516 bool WriteNetRefHandleDestructionInfo(FNetSerializationContext&
Context, FNetRefHandle
Handle);
518 struct FWriteBatchResult
520 EWriteStatus Status = EWriteStatus::Skipped;
531 uint32 WriteOOBAttachments(FNetSerializationContext&
Context);
537 uint32 HandleObjectBatchSuccess(
const FBatchInfo& BatchInfo, FBatchRecord&
OutRecord);
553 void SetupReplicationInfoForAttachmentsToObjectsNotInScope();
569 bool HasInFlightStateChanges(
const FReplicationRecord::FRecordInfo*
RecordInfo)
const;
579 bool CanQueueHugeObject()
const;
581 void FreeHugeObjectSendQueue();
583 bool HasDataToSend(
const FWriteContext&
Context)
const;
585 void CollectAndAppendExports(FNetSerializationContext&
Context,
uint8*
RESTRICT InternalBuffer,
const FReplicationProtocol* Protocol)
const;
587 bool IsWriteObjectSuccess(EWriteObjectStatus Status)
const;
591 void DiscardAllRecords();
592 void StopAllReplication();
597 void WriteSentinel(FNetBitStreamWriter* Writer,
const TCHAR* DebugName);
604 FReplicationParameters Parameters;
607 FReplicationRecord ReplicationRecord;
619 FNetBitArray ObjectsPendingDestroy;
622 FNetBitArray ObjectsWithDirtyChanges;
625 FNetBitArray ObjectsInScope;
628 FNetObjectAttachmentsWriter Attachments;
631 FReplicationSystemInternal* ReplicationSystemInternal =
nullptr;
632 FNetRefHandleManager* NetRefHandleManager =
nullptr;
634 FDeltaCompressionBaselineManager* BaselineManager =
nullptr;
635 FObjectReferenceCache* ObjectReferenceCache =
nullptr;
636 const FReplicationFiltering* ReplicationFiltering =
nullptr;
637 FReplicationConditionals* ReplicationConditionals =
nullptr;
640 FNetExports* NetExports =
nullptr;
641 FNetTypeStats* NetTypeStats =
nullptr;
643 FWriteContext WriteContext;
644 FBitStreamInfo WriteBitStreamInfo;
645 FHugeObjectSendQueue HugeObjectSendQueue;
650 bool bReplicationEnabled =
false;
653 const bool bHighPrioCreate =
false;
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
int32 InternalIndex
Definition VulkanMemory.cpp:4036
Definition ArrayView.h:139
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
EWriteResult
Definition DataStream.h:65
Definition NetBitArray.h:337
Definition NetBitArray.h:74
Definition NetSerializationContext.h:31
Definition ChangeMaskUtil.h:29
StorageWordType * GetPointer(uint32 BitCount)
Definition ChangeMaskUtil.h:72
Definition NetExports.h:17
FNetObjectAttachmentSendQueue::FReliableReplicationRecord FReliableReplicationRecord
Definition AttachmentReplication.h:113
FNetObjectAttachmentSendQueue::FCommitRecord FCommitRecord
Definition AttachmentReplication.h:112
Definition ReplicationWriter.h:55
FString PrintObjectInfo(FInternalNetRefIndex ObjectIndex) const
Definition ReplicationWriter.cpp:4255
bool AreAllReliableAttachmentsSentAndAcked() const
Definition ReplicationWriter.cpp:341
void Deinit()
Definition ReplicationWriter.cpp:463
bool QueueNetObjectAttachments(FInternalNetRefIndex OwnerInternalIndex, FInternalNetRefIndex SubObjectInternalIndex, TArrayView< const TRefCountPtr< FNetBlob > > Attachments, ENetObjectAttachmentSendPolicyFlags SendFlags)
Definition ReplicationWriter.cpp:287
static const uint32 PartialSortObjectCount
Definition ReplicationWriter.h:64
void UpdateDirtyChangeMasks(const FChangeMaskCache &CachedChangeMasks)
Definition ReplicationWriter.h:177
bool IsReplicationEnabled() const
Definition ReplicationWriter.cpp:280
static constexpr float LostStatePriorityBump
Definition ReplicationWriter.h:60
void UpdatePriorities(const float *UpdatedPriorities)
Definition ReplicationWriter.cpp:1092
void ProcessDeliveryNotification(EPacketDeliveryStatus PacketDeliveryStatus)
Definition ReplicationWriter.cpp:1793
static const TCHAR * LexToString(const EReplicatedObjectState State)
Definition ReplicationWriter.cpp:122
EReplicatedObjectState
Definition ReplicationWriter.h:70
@ WaitOnDestroyConfirmation
@ SubObjectPendingDestroy
@ AttachmentToObjectNotInScope
@ WaitOnCreateConfirmation
const FNetBitArray & GetObjectsRequiringPriorityUpdate() const
Definition ReplicationWriter.cpp:1087
void EndWrite()
Definition ReplicationWriter.cpp:3811
void SetNetExports(FNetExports &InNetExports)
Definition ReplicationWriter.cpp:4110
void NotifyDestroyedObjectPendingEndReplication(FInternalNetRefIndex ObjectInternalIndex)
Definition ReplicationWriter.cpp:1078
void UpdateDirtyGlobalLifetimeConditionals(TArrayView< FInternalNetRefIndex > ObjectsWithDirtyConditionals)
Definition ReplicationWriter.cpp:949
EFlushFlags
Definition ReplicationWriter.h:98
@ FlushFlags_FlushTornOffSubObjects
Definition ReplicationWriter.h:102
@ FlushFlags_FlushReliable
Definition ReplicationWriter.h:101
@ FlushFlags_None
Definition ReplicationWriter.h:99
@ FlushFlags_All
Definition ReplicationWriter.h:103
@ FlushFlags_Default
Definition ReplicationWriter.h:104
@ FlushFlags_FlushState
Definition ReplicationWriter.h:100
static constexpr float CreatePriority
Definition ReplicationWriter.h:58
UDataStream::EWriteResult BeginWrite(const UDataStream::FBeginWriteParameters &Params)
Definition ReplicationWriter.cpp:3723
static constexpr float SchedulingThresholdPriority
Definition ReplicationWriter.h:61
~FReplicationWriter()
Definition ReplicationWriter.cpp:265
void UpdateScope(const FNetBitArrayView &ScopedObjects)
Definition ReplicationWriter.cpp:758
void SetReplicationEnabled(bool bInReplicationEnabled)
Definition ReplicationWriter.cpp:275
static constexpr float TearOffPriority
Definition ReplicationWriter.h:59
void ForceUpdateDirtyChangeMasks(const FChangeMaskCache &CachedChangeMasks, EFlushFlags ExtraFlushFlags, bool bMarkForTearOff)
Definition ReplicationWriter.h:168
Definition NetObjectBlobHandler.h:32
Definition ObjectReplicationBridge.h:83
Definition PartialNetObjectAttachmentHandler.h:44
Definition ReplicationSystem.h:70
@ Object
Definition TokenizedMessage.h:43
@ Idle
Definition PathFollowingComponent.h:39
Type
Definition PawnAction_Move.h:11
Definition OverriddenPropertySet.cpp:45
State
Definition PacketHandler.h:88
Definition NetworkVersion.cpp:28
EReplicationDataStreamDebugFeatures
Definition ReplicationDataStreamDebug.h:24
@ None
Definition ReplicationDataStreamDebug.h:25
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
ENetObjectAttachmentType
Definition AttachmentReplication.h:22
FNetBitArrayView::StorageWordType ChangeMaskStorageType
Definition ChangeMaskUtil.h:11
Definition NetworkVersion.cpp:28
EPacketDeliveryStatus
Definition PacketNotification.h:12
EDataStreamWriteMode
Definition DataStream.h:22
ENetObjectAttachmentSendPolicyFlags
Definition ReplicationSystemTypes.h:52
U16 Index
Definition radfft.cpp:71
Definition DataStream.h:124
Definition DataStream.h:132
Definition NetDebugName.h:17
Definition ChangeMaskCache.h:17
Definition ReliableNetBlobQueue.h:29
Definition ReplicationTypes.h:17
Definition ReplicationRecord.h:47
Definition ReplicationWriter.h:151
uint64 StartCycles
Definition ReplicationWriter.h:152
uint32 SuppressWarningCounter
Definition ReplicationWriter.h:153
Definition ReplicationWriter.h:380
uint64 StartStallTime
Definition ReplicationWriter.h:386
uint64 StartSendingTime
Definition ReplicationWriter.h:382
uint64 EndSendingTime
Definition ReplicationWriter.h:384
Definition ReplicationWriter.h:111
FChangeMaskStorageOrPointer ChangeMaskOrPtr
Definition ReplicationWriter.h:114
uint64 IsSubObject
Definition ReplicationWriter.h:123
uint64 FlushFlags
Definition ReplicationWriter.h:134
uint64 Value
Definition ReplicationWriter.h:117
static const uint32 LocalChangeMaskMaxBitCount
Definition ReplicationWriter.h:140
uint64 HasDirtyChangeMask
Definition ReplicationWriter.h:124
ChangeMaskStorageType * GetChangeMaskStoragePointer()
Definition ReplicationWriter.h:144
uint64 HasChangemaskFilter
Definition ReplicationWriter.h:126
uint64 State
Definition ReplicationWriter.h:121
uint64 LastAckedBaselineIndex
Definition ReplicationWriter.h:132
uint64 IsDestructionInfo
Definition ReplicationWriter.h:127
const ChangeMaskStorageType * GetChangeMaskStoragePointer() const
Definition ReplicationWriter.h:145
uint64 SubObjectPendingDestroy
Definition ReplicationWriter.h:130
uint64 ChangeMaskBitCount
Definition ReplicationWriter.h:120
EReplicatedObjectState GetState() const
Definition ReplicationWriter.h:142
uint64 PendingBaselineIndex
Definition ReplicationWriter.h:133
uint64 IsDeltaCompressionEnabled
Definition ReplicationWriter.h:131
FReplicationInfo()
Definition ReplicationWriter.h:658
uint64 HasDirtyConditionals
Definition ReplicationWriter.h:135
uint64 HasDirtySubObjects
Definition ReplicationWriter.h:122
uint64 TearOff
Definition ReplicationWriter.h:129
uint64 IsCreationConfirmed
Definition ReplicationWriter.h:128
uint64 HasAttachments
Definition ReplicationWriter.h:125
uint64 HasCannotSendInfo
Definition ReplicationWriter.h:136