UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PartialNetBlob.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
8
9namespace UE::Net
10{
11
12class FPartialNetBlob final : public FNetBlob
13{
14public:
23
24 // Split a NetBlob into multiple PartialNetBlobs. The blob will be split even if the original one didn't need it.
26
27 // Split a RawDataNetBlob into multiple PartialNetBlobs. The blob will be split even if the original one didn't need it.
29
30public:
32 {
33 None = 0,
34 IsFirstPart = 1U,
35 };
37
39
40 // This will only return legible data for the first part on the receiving end.
41 uint32 GetPartCount() const { return (IsFirstPart() ? PartCount : 0U); }
42
43 bool IsFirstPart() const { return EnumHasAnyFlags(SequenceFlags, ESequenceFlags::IsFirstPart); }
44
45 uint32 GetSequenceNumber() const { return SequenceNumber; }
46
47 uint32 GetPayloadBitCount() const { return PayloadBitCount; }
48 const uint32* GetPayload() const { return Payload.GetData(); }
49
50 const FNetBlobCreationInfo& GetOriginalCreationInfo() const { return OriginalCreationInfo; }
51
52 void SetDebugName(const FNetDebugName& InDebugName) { DebugName = InDebugName; }
53
54private:
55
56 virtual TArrayView<const FNetObjectReference> GetNetObjectReferenceExports() const override final;
57 virtual TArrayView<const FNetToken> GetNetTokenExports() const override final;
58
59 virtual void SerializeWithObject(FNetSerializationContext& Context, FNetRefHandle RefHandle) const override;
60 virtual void DeserializeWithObject(FNetSerializationContext& Context, FNetRefHandle RefHandle) override;
61
64
65 void InternalSerialize(FNetSerializationContext& Context) const;
66 void InternalDeserialize(FNetSerializationContext& Context);
67
68 void InternalSerializeBlob(FNetSerializationContext& Context) const;
69 void InternalDeserializeBlob(FNetSerializationContext& Context);
70
71 struct FPayloadSplitParams
72 {
73 FNetDebugName DebugName;
74
76 FNetBlobCreationInfo OriginalCreationInfo;
77 FNetBlob* OriginalBlob;
78 TConstArrayView<FNetObjectReference> ObjectReferencesPendingExport;
79 TConstArrayView<FNetToken> NetTokensPendingExport;
80 const uint32* Payload;
81 uint32 PayloadBitCount;
82 uint32 PartBitCount;
83 };
84 static void SplitPayload(const FPayloadSplitParams& SplitParams, TArray<TRefCountPtr<FNetBlob>>& OutPartialBlobs);
85
86 // Used by the first part to be able to reconstruct the original message.
87 FNetBlobCreationInfo OriginalCreationInfo;
88 TRefCountPtr<FNetBlob> OriginalBlob;
89
91 uint32 SequenceNumber = 0;
92 // PartCount is only valid if it's the first part.
93 uint16 PartCount = 0;
94 uint16 PayloadBitCount = 0;
95 // Use uint32 for guaranteed FNetBitStreamReader/Writer compatibility
96 TArray<uint32> Payload;
97 TArray<FNetObjectReference, TInlineAllocator<2>> ObjectReferenceExportsArray;
98 TArray<FNetToken, TInlineAllocator<4>> NetTokenExportsArray;
99
100 FNetDebugName DebugName;
101};
102
103}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ArrayView.h:139
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
Definition RefCounting.h:454
Definition NetBlob.h:62
FNetBlobCreationInfo CreationInfo
Definition NetBlob.h:172
Definition NetObjectReference.h:38
Definition NetRefHandle.h:25
Definition NetSerializationContext.h:31
Definition NetToken.h:22
Definition PartialNetBlob.h:13
const uint32 * GetPayload() const
Definition PartialNetBlob.h:48
void SetDebugName(const FNetDebugName &InDebugName)
Definition PartialNetBlob.h:52
const FNetBlobCreationInfo & GetOriginalCreationInfo() const
Definition PartialNetBlob.h:50
uint32 GetPartCount() const
Definition PartialNetBlob.h:41
FRIEND_ENUM_CLASS_FLAGS(ESequenceFlags)
bool IsFirstPart() const
Definition PartialNetBlob.h:43
uint32 GetSequenceNumber() const
Definition PartialNetBlob.h:45
static IRISCORE_API bool SplitNetBlob(FNetSerializationContext &Context, const FNetBlobCreationInfo &CreationInfo, const FSplitParams &SplitParams, const TRefCountPtr< FNetBlob > &Blob, TArray< TRefCountPtr< FNetBlob > > &OutPartialBlobs)
Definition PartialNetBlob.cpp:157
uint32 GetPayloadBitCount() const
Definition PartialNetBlob.h:47
ESequenceFlags
Definition PartialNetBlob.h:32
Definition NetworkVersion.cpp:28
Definition NetBlob.h:56
Definition NetDebugName.h:17
Definition PartialNetBlob.h:16
uint32 MaxPartCount
Definition PartialNetBlob.h:18
FNetDebugName DebugName
Definition PartialNetBlob.h:20
FNetObjectReference NetObjectReference
Definition PartialNetBlob.h:19
uint32 MaxPartBitCount
Definition PartialNetBlob.h:17
bool bSerializeWithObject
Definition PartialNetBlob.h:21