UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AttachmentReplication.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8#include "Containers/Map.h"
9
11namespace UE::Net::Private
12{
13 class FNetBlobHandlerManager;
14 class FNetObjectAttachmentsReader;
15 class FNetObjectAttachmentsWriter;
16}
17
18namespace UE::Net::Private
19{
20
22{
23 // For normal attachments a valid ObjectIndex is required.
24 Normal,
25
26 // For special attachments like OutOfBand and HugeObject the ObjectIndex is assumed to be zero.
29
30 // For internal use only
32};
33
45
47{
48public:
50
58
59 // Commit record contains all data to be committed after serialization is committed to, i.e. will be part of a packet intended to be sent. The ReliableReplicationRecord needs to be part of the packet replication record so that we can act on packet notifications.
67
68public:
71
72 bool Enqueue(TArrayView<const TRefCountPtr<FNetBlob>> Attachments);
73
75
77
78 bool HasUnsent() const;
79
80 bool HasUnsentUnreliable() const;
81
82 bool IsSafeToDestroy() const;
83
84 bool IsAllSentAndAcked() const;
85
86 bool IsAllReliableSentAndAcked() const;
87
89
91
92private:
95
99
100 void CommitReplicationRecord(const FCommitRecord& Record);
101
102 void ProcessPacketDeliveryStatus(EPacketDeliveryStatus Status, const FReliableReplicationRecord& Record);
103
104 FReliableSendQueue* ReliableQueue;
106 uint32 MaxUnreliableCount;
107};
108
110{
111public:
114
115public:
116 bool Enqueue(ENetObjectAttachmentType Type, uint32 ObjectIndex, TArrayView<const TRefCountPtr<FNetBlob>> Attachments);
117
118 bool HasUnsentAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex) const;
119
121
122 // Whether all queued attachments have been sent and that all reliable ones have been acked.
123 bool IsAllSentAndAcked(ENetObjectAttachmentType Type, uint32 ObjectIndex) const;
124
125 // Whether all queued reliable attachments have been sent and acked
126 bool IsAllReliableSentAndAcked(ENetObjectAttachmentType Type, uint32 ObjectIndex) const;
127
128 // Whether all queued reliable attachments have been sent and acked for all types and objects
130
131 // Whether more reliable attachments can be sent now. It's possible to queue up as many attachments as you see fit, but if the queue is full it can take a while before more attachments will be replicated.
133
134 // Whether the queue can be destroyed without causing issues if more attachments are queued to this instance.
135 bool IsSafeToDestroy(ENetObjectAttachmentType Type, uint32 ObjectIndex) const;
136
137 void DropAllAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex);
138
139 // Counts all unreliable attachments for the given type
141
143
145
146 void CommitReplicationRecord(ENetObjectAttachmentType Type, uint32 ObjectIndex, const FCommitRecord& Record);
147
149
150private:
151 bool NetBlobMightNeedSplitting(const TRefCountPtr<FNetObjectAttachment>& Attachment) const;
152
154 const FNetObjectAttachmentSendQueue* GetQueue(ENetObjectAttachmentType Type, uint32 ObjectIndex) const;
155
156 FNetObjectAttachmentSendQueue* GetOrCreateQueue(ENetObjectAttachmentType Reason, uint32 ObjectIndex);
157
160};
161
166
168{
169public:
172
173 void Init(const FNetObjectAttachmentReceiveQueueInitParams& InitParams);
174
175 bool IsSafeToDestroy() const;
176 bool HasUnprocessed() const;
177
179 void PopReliable();
180
182 void PopUnreliable();
183
185
186private:
189
190 enum EDeferredProcessingQueue : unsigned
191 {
192 Unreliable,
193 Reliable,
194 };
195
196 bool IsDeferredProcessingQueueEmpty(EDeferredProcessingQueue Queue) const;
197 bool IsDeferredProcessingQueueSafeToDestroy(EDeferredProcessingQueue Queue) const;
198 bool HasDeferredProcessingQueueUnprocessed(EDeferredProcessingQueue Queue) const;
199
200 bool IsPartialNetBlob(const TRefCountPtr<FNetBlob>& Blob) const;
201
202 void Deserialize(FNetSerializationContext& Context, FNetRefHandle RefHandle);
203 uint32 DeserializeReliable(FNetSerializationContext& Context, FNetRefHandle RefHandle);
204 uint32 DeserializeUnreliable(FNetSerializationContext& Context, FNetRefHandle RefHandle);
205
206 FReliableNetBlobQueue* ReliableQueue = nullptr;
207 FDeferredProcessingQueue* DeferredProcessingQueues[2] = {};
208 const UPartialNetObjectAttachmentHandler* PartialNetObjectAttachmentHandler = nullptr;
209 uint32 MaxUnreliableCount = 0;
210 FNetBlobType PartialNetBlobType = InvalidNetBlobType;
211};
212
217
243
244}
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayView.h:139
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition ResizableCircularQueue.h:21
Definition UniquePtr.h:107
Definition NetRefHandle.h:25
Definition NetSerializationContext.h:31
Definition AttachmentReplication.h:168
const TRefCountPtr< FNetBlob > * PeekUnreliable() const
Definition AttachmentReplication.cpp:880
bool IsSafeToDestroy() const
Definition AttachmentReplication.cpp:853
~FNetObjectAttachmentReceiveQueue()
Definition AttachmentReplication.cpp:838
FNetObjectAttachmentReceiveQueue()
Definition AttachmentReplication.cpp:833
void SetUnreliableQueueCapacity(uint32 QueueCapacity)
Definition AttachmentReplication.cpp:897
bool HasUnprocessed() const
Definition AttachmentReplication.cpp:858
void PopReliable()
Definition AttachmentReplication.cpp:875
void PopUnreliable()
Definition AttachmentReplication.cpp:892
const TRefCountPtr< FNetBlob > * PeekReliable()
Definition AttachmentReplication.cpp:863
Definition AttachmentReplication.h:47
FReliableNetBlobQueue::FReplicationRecord FReliableReplicationRecord
Definition AttachmentReplication.h:49
SIZE_T GetUnreliableCount() const
Definition AttachmentReplication.cpp:246
bool HasUnsent() const
Definition AttachmentReplication.cpp:273
bool IsSafeToDestroy() const
Definition AttachmentReplication.cpp:298
bool HasUnsentUnreliable() const
Definition AttachmentReplication.cpp:278
bool Enqueue(TArrayView< const TRefCountPtr< FNetBlob > > Attachments)
Definition AttachmentReplication.cpp:215
bool IsAllReliableSentAndAcked() const
Definition AttachmentReplication.cpp:288
bool CanSendMoreReliableAttachments() const
Definition AttachmentReplication.cpp:293
void DropUnreliable(bool &bOutHasUnsentAttachments)
Definition AttachmentReplication.cpp:259
bool IsAllSentAndAcked() const
Definition AttachmentReplication.cpp:283
FNetObjectAttachmentSendQueue()
Definition AttachmentReplication.cpp:204
void SetUnreliableQueueCapacity(uint32 QueueCapacity)
Definition AttachmentReplication.cpp:303
~FNetObjectAttachmentSendQueue()
Definition AttachmentReplication.cpp:210
Definition AttachmentReplication.h:219
~FNetObjectAttachmentsReader()
Definition AttachmentReplication.cpp:1092
bool HasUnprocessedAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:1101
void DropAllAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex)
Definition AttachmentReplication.cpp:1112
FNetObjectAttachmentsReader()
Definition AttachmentReplication.cpp:1088
void Deserialize(FNetSerializationContext &Context, ENetObjectAttachmentType Type, uint32 ObjectIndex, FNetRefHandle RefHandle)
Definition AttachmentReplication.cpp:1117
FNetObjectAttachmentReceiveQueue * GetQueue(ENetObjectAttachmentType Type, uint32 ObjectIndex)
Definition AttachmentReplication.cpp:1129
Definition AttachmentReplication.h:110
bool AreAllObjectsReliableSentAndAcked() const
Definition AttachmentReplication.cpp:560
void DropAllAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex)
Definition AttachmentReplication.cpp:603
SIZE_T GetUnreliableAttachmentCount(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:608
FNetObjectAttachmentSendQueue::FReliableReplicationRecord FReliableReplicationRecord
Definition AttachmentReplication.h:113
void ProcessPacketDeliveryStatus(EPacketDeliveryStatus Status, ENetObjectAttachmentType Type, uint32 ObjectIndex, const FReliableReplicationRecord &Record)
Definition AttachmentReplication.cpp:657
bool HasUnsentUnreliableAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:527
FNetObjectAttachmentSendQueue::FCommitRecord FCommitRecord
Definition AttachmentReplication.h:112
bool IsAllReliableSentAndAcked(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:549
bool IsSafeToDestroy(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:592
void DropUnreliableAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex, bool &bOutHasUnsentAttachments)
Definition AttachmentReplication.cpp:619
bool IsAllSentAndAcked(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:538
void CommitReplicationRecord(ENetObjectAttachmentType Type, uint32 ObjectIndex, const FCommitRecord &Record)
Definition AttachmentReplication.cpp:651
bool CanSendMoreReliableAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:581
bool Enqueue(ENetObjectAttachmentType Type, uint32 ObjectIndex, TArrayView< const TRefCountPtr< FNetBlob > > Attachments)
Definition AttachmentReplication.cpp:505
bool HasUnsentAttachments(ENetObjectAttachmentType Type, uint32 ObjectIndex) const
Definition AttachmentReplication.cpp:516
Definition ReliableNetBlobQueue.h:25
Definition PartialNetObjectAttachmentHandler.h:44
Definition NetworkVersion.cpp:28
EAttachmentWriteStatus
Definition AttachmentReplication.h:35
ENetObjectAttachmentType
Definition AttachmentReplication.h:22
EPacketDeliveryStatus
Definition PacketNotification.h:12
constexpr FNetBlobType InvalidNetBlobType
Definition NetBlob.h:49
uint32 FNetBlobType
Definition NetBlob.h:46
const UPartialNetObjectAttachmentHandler * PartialNetObjectAttachmentHandler
Definition AttachmentReplication.h:164
FUnreliableReplicationRecord UnreliableCommitRecord
Definition AttachmentReplication.h:65
bool IsValid() const
Definition AttachmentReplication.h:62
FReliableReplicationRecord ReliableReplicationRecord
Definition AttachmentReplication.h:64
static constexpr uint32 InvalidReplicationRecord
Definition AttachmentReplication.h:55
Definition AttachmentReplication.h:214
const UPartialNetObjectAttachmentHandler * PartialNetObjectAttachmentHandler
Definition AttachmentReplication.h:215
bool IsValid() const
Definition ReliableNetBlobQueue.h:75