UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ChunkedDataWriter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/Array.h"
13
14namespace UE::Net::Private
15{
16
17// Used by ChunkedDataStream to capture and send payloads and exports
19{
20public:
25
26 // Tracks references associated with an enqueued payload
41
42 // Enqueued payload to send
73
74 // Split chunk of data, referencing source
89
90public:
95
97 {
98 return (Acked[Index >> 5U] & (1U << (Index & 31U))) != 0U;
99 }
100
102 {
103 Acked[Index >> 5U] |= (1U << (Index & 31U));
104 }
105
107 {
108 return SetIndexIsAcked(SequenceToIndex(Seq));
109 }
110
112 {
113 Acked[Index >> 5U] &= ~(1U << (Index & 31U));
114 }
115
117 {
118 return (Sent[Index >> 5U] & (1U << (Index & 31U))) != 0U;
119 }
120
121 bool IsSequenceSent(uint32 Seq) const
122 {
123 return IsIndexSent(SequenceToIndex(Seq));
124 }
125
127 {
128 Sent[Index >> 5U] |= (1U << (Index & 31U));
129 }
130
132 {
133 return SetIndexIsSent(SequenceToIndex(Seq));
134 }
135
137 {
138 Sent[Index >> 5U] &= ~(1U << (Index & 31U));
139 }
140
142 {
144 }
145
146 bool SplitPayload(FSendQueueEntry& SrcEntry, TConstArrayView<uint8> Payload, bool bIsExportPayload = false);
147 FReferencesForExport* CreateExportPayload();
148 void ResetExports();
149 bool EnqueuePayload(const TSharedPtr<TArray64<uint8>>& Payload);
150 bool CanSend() const;
151 bool UpdateSendQueue();
155 void PopDeliveredChunks();
157 void RemoveSendQueueEntry(FSendQueueEntry* SendQueueEntry);
158
159 // This could be more precise by by updating CurrentBytesInSendQueue based on individual datachunks.
161 {
163 }
164
165public:
166 // Payload data
168
169 // Split data chunks
171
172 // In-flight data chunks pending ack
174
175 // Track status of entries in the DataChunksPendingSend
180
181 // Cached copy of DataStream init params
185
186 // Total number of bytes in send queue.
188
189 // Just for sanity
191
192 // We do not allow more paylaod bytes to be enqueued than this.
194
195 // Exports
198};
199
200} // End of namespace(s)
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
#define UE_NET_TRACE_DESTROY_COLLECTOR(...)
Definition NetTrace.h:145
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ChunkedDataStream.h:21
Definition Array.h:670
Definition RefCounting.h:454
Definition RingBuffer.h:135
Definition SharedPointer.h:692
Definition UniquePtr.h:107
EWriteResult
Definition DataStream.h:65
Definition NetSerializationContext.h:31
Definition ChunkedDataWriter.h:19
UDataStream::FBeginWriteParameters FBeginWriteParameters
Definition ChunkedDataWriter.h:22
uint32 SequenceToIndex(uint32 Seq) const
Definition ChunkedDataWriter.h:91
UDataStream::EWriteResult EWriteResult
Definition ChunkedDataWriter.h:21
uint32 ExportsBufferMaxSize
Definition ChunkedDataWriter.h:190
uint32 CurrentBytesInSendQueue
Definition ChunkedDataWriter.h:187
bool IsSequenceSent(uint32 Seq) const
Definition ChunkedDataWriter.h:121
FInitParameters InitParams
Definition ChunkedDataWriter.h:182
uint32 SendBufferMaxSize
Definition ChunkedDataWriter.h:193
uint16 NextSequenceNumber
Definition ChunkedDataWriter.h:178
void PopDeliveredChunks()
Definition ChunkedDataWriter.cpp:412
void ProcessPacketDeliveryStatus(UE::Net::EPacketDeliveryStatus Status, FDataStreamRecord const *Record)
Definition ChunkedDataWriter.cpp:449
bool IsIndexSent(uint32 Index) const
Definition ChunkedDataWriter.h:116
UE::Net::FIrisPackageMapExports PackageMapExports
Definition ChunkedDataWriter.h:196
TRingBuffer< FDataChunk > DataChunksPendingSend
Definition ChunkedDataWriter.h:170
uint32 Acked[(FChunkedDataStreamParameters::MaxUnackedDataChunkCount+31)/32]
Definition ChunkedDataWriter.h:177
void SetIndexIsSent(uint32 Index)
Definition ChunkedDataWriter.h:126
uint32 Sent[(FChunkedDataStreamParameters::MaxUnackedDataChunkCount+31)/32]
Definition ChunkedDataWriter.h:176
void SetIndexIsAcked(uint32 Index)
Definition ChunkedDataWriter.h:101
void ResetExports()
Definition ChunkedDataWriter.cpp:196
EWriteResult BeginWrite(const FBeginWriteParameters &Params)
Definition ChunkedDataWriter.cpp:244
FObjectReferenceCache * ObjectReferenceCache
Definition ChunkedDataWriter.h:184
void ClearSequenceIsSent(uint32 Seq)
Definition ChunkedDataWriter.h:141
void SetSequenceIsSent(uint32 Seq)
Definition ChunkedDataWriter.h:131
bool SplitPayload(FSendQueueEntry &SrcEntry, TConstArrayView< uint8 > Payload, bool bIsExportPayload=false)
Definition ChunkedDataWriter.cpp:70
FReferencesForExport * CreateExportPayload()
Definition ChunkedDataWriter.cpp:112
bool UpdateSendQueue()
Definition ChunkedDataWriter.cpp:259
void RemoveSendQueueEntry(FSendQueueEntry *SendQueueEntry)
Definition ChunkedDataWriter.cpp:403
bool CanSend() const
Definition ChunkedDataWriter.cpp:239
UReplicationSystem * ReplicationSystem
Definition ChunkedDataWriter.h:183
UE::Net::FNetTokenExportContext::FNetTokenExports NetTokensPendingExport
Definition ChunkedDataWriter.h:197
void ClearIndexIsAcked(uint32 Index)
Definition ChunkedDataWriter.h:111
TRingBuffer< uint16 > DataChunksPendingAck
Definition ChunkedDataWriter.h:173
bool EnqueuePayload(const TSharedPtr< TArray64< uint8 > > &Payload)
Definition ChunkedDataWriter.cpp:202
bool IsIndexAcked(uint32 Index) const
Definition ChunkedDataWriter.h:96
TArray< TUniquePtr< FSendQueueEntry > > SendQueue
Definition ChunkedDataWriter.h:167
bool HasAcknowledgedAllReliableData() const
Definition ChunkedDataWriter.cpp:254
EWriteResult WriteData(UE::Net::FNetSerializationContext &Context, FDataStreamRecord const *&OutRecord)
Definition ChunkedDataWriter.cpp:284
void ClearIndexIsSent(uint32 Index)
Definition ChunkedDataWriter.h:136
void SetSequenceIsAcked(uint32 Seq)
Definition ChunkedDataWriter.h:106
uint32 GetQueuedBytes() const
Definition ChunkedDataWriter.h:160
Definition ObjectReferenceCache.h:38
Definition ReplicationSystem.h:70
Definition NetworkVersion.cpp:28
EPacketDeliveryStatus
Definition PacketNotification.h:12
U16 Index
Definition radfft.cpp:71
Definition DataStream.h:39
Definition DataStream.h:124
Definition DataStream.h:102
Definition IrisObjectReferencePackageMap.h:21
static constexpr uint32 MaxUnackedDataChunkCount
Definition ChunkedDataStreamCommon.h:26
Definition ChunkedDataWriter.h:76
uint32 PayloadByteOffset
Definition ChunkedDataWriter.h:82
uint16 SequenceNumber
Definition ChunkedDataWriter.h:84
uint16 bIsFirstChunk
Definition ChunkedDataWriter.h:86
FDataChunk()
Definition ChunkedDataWriter.cpp:18
uint16 bIsExportChunk
Definition ChunkedDataWriter.h:87
uint32 PartCount
Definition ChunkedDataWriter.h:83
TRefCountPtr< FSendQueueEntry > SrcEntry
Definition ChunkedDataWriter.h:81
uint16 PartByteCount
Definition ChunkedDataWriter.h:85
FNetExportContext::FBatchExports BatchExports
Definition ChunkedDataWriter.h:30
TArray< uint8, TAlignedHeapAllocator<> > ExportsPayload
Definition ChunkedDataWriter.h:29
~FReferencesForExport()
Definition ChunkedDataWriter.h:32
FNetTraceCollector * TraceCollector
Definition ChunkedDataWriter.h:39
FSendQueueEntry(const TSharedPtr< TArray64< uint8 > > &InPayload)
Definition ChunkedDataWriter.h:54
void AddRef() const
Definition ChunkedDataWriter.h:59
TSharedPtr< TArray64< uint8 > > Payload
Definition ChunkedDataWriter.h:69
int32 RefCount
Definition ChunkedDataWriter.h:71
TUniquePtr< FReferencesForExport > References
Definition ChunkedDataWriter.h:70
FSendQueueEntry()
Definition ChunkedDataWriter.h:45
void Release() const
Definition ChunkedDataWriter.h:64
FSendQueueEntry(FSendQueueEntry &&Other)
Definition ChunkedDataWriter.h:46