UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetBlobManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4#include "CoreTypes.h"
8#include "Iris/ReplicationSystem/NetRefHandleManager.h" // For FInternalNetRefIndex
10
11class UNetBlobHandler;
15class UNetRPCHandler;
16namespace UE::Net
17{
18 class FNetObjectReference;
19
20 namespace Private
21 {
22 class FNetRefHandleManager;
23 class FObjectReferenceCache;
24 class FReplicationConnections;
25 }
26}
27
28namespace UE::Net::Private
29{
30
36
38{
39public:
41
42 void Init(FNetBlobManagerInitParams& InitParams);
43
45
46 bool AllowObjectReplication() const { return bAllowObjectReplication; }
47
49
51 {
52 const UObject* RootObject = nullptr;
53 const UObject* SubObject = nullptr;
54 const UFunction* Function = nullptr;
55 };
56
57 // Multicast RPC
59
60 // Unicast RPC
62
65
71
73
77
78 FNetBlobHandlerManager& GetNetBlobHandlerManager() { return BlobHandlerManager; }
79 const FNetBlobHandlerManager& GetNetBlobHandlerManager() const { return BlobHandlerManager; }
80
81 const UPartialNetObjectAttachmentHandler* GetPartialNetObjectAttachmentHandler() const { return PartialNetObjectAttachmentHandler.Get(); }
82 const UNetObjectBlobHandler* GetNetObjectBlobHandler() const { return NetObjectBlobHandler.Get(); }
83
84 // Connection handling
85 void AddConnection(uint32 ConnectionId);
86 void RemoveConnection(uint32 ConnectionId);
87
88private:
89
90 void RegisterDefaultHandlers();
91
92 struct FRPCOwner
93 {
94 // The replicated object responsible for carrying (sending) the RPC.
95 FNetObjectReference CallerRef;
96
97 // The object the RPC will be applied to.
98 FNetObjectReference TargetRef;
99
102 };
103 bool GetRPCOwner(FRPCOwner& OutOwnerInfo, const FSendRPCContext& Context) const;
104
109 bool GetRootObjectIndicesFromHandle(FNetRefHandle RootObjectRefHandle, FInternalNetRefIndex& OutRootObjectIndex) const;
110
115 bool GetRootObjectAndSubObjectIndicesFromSubObjectHandle(FNetRefHandle SubObjectRefHandle, FInternalNetRefIndex& OutRootObjectIndex, FInternalNetRefIndex& OutSubObjectIndex) const;
116
121 bool GetRootObjectAndSubObjectIndicesFromAnyHandle(FNetRefHandle AnyRefHandle, FInternalNetRefIndex& OutRootObjectIndex, FInternalNetRefIndex& OutSubObjectIndex) const;
122
124 {
125 public:
127
128 void Init(FNetBlobManager* Manager);
129
130 // Unicast
131 void Enqueue(uint32 ConnectionId, FInternalNetRefIndex OwnerIndex, FInternalNetRefIndex SubObjectIndex, const TRefCountPtr<FNetObjectAttachment>& Attachment, ENetObjectAttachmentSendPolicyFlags SendFlags);
132
133 // Multicast
135
137 void ProcessQueue(EProcessMode ProcessMode);
138 void ResetProcessQueue();
140
141 bool HasUnprocessedReliableAttachments(FInternalNetRefIndex InternalIndex) const;
142 bool HasAnyUnprocessedReliableAttachments() const;
143
144 private:
145 struct FNetObjectAttachmentQueueEntry
146 {
147 uint32 ConnectionId;
148 FInternalNetRefIndex OwnerIndex;
149 FInternalNetRefIndex SubObjectIndex;
152 FNetBitArray MulticastConnections;
153 };
155
156 bool PreSerializeAndSplitNetBlob(uint32 ConnectionId, const TRefCountPtr<FNetObjectAttachment>& Attachment, TArray<TRefCountPtr<FNetBlob>>& OutPartialNetBlobs, bool bInSendAttachmentsWithObject) const;
157
158 FNetBlobManager* Manager;
159 FQueue AttachmentQueue;
160 FQueue ScheduleAsOOBAttachmentQueue;
161 bool bHasMulticastAttachments;
162
163 struct FProcessQueueContext
164 {
165 FNetBitArray AttachmentsToObjectsGoingOutOfScope;
166 FNetBitArray AttachmentsToObjectsInScope;
167 FNetBitArray ConnectionsPendingSendInPostDispatch;
168
169 TArray<uint32> ConnectionIds;
170 FReplicationConnections* Connections = nullptr;
171 const FNetRefHandleManager* NetRefHandleManager = nullptr;
172 FQueue* QueueToProcess = nullptr;
173
174 void Reset()
175 {
176 Connections = nullptr;
177 NetRefHandleManager = nullptr;
178 QueueToProcess = nullptr;
179 ConnectionsPendingSendInPostDispatch.ClearAllBits();
180 }
181
182 bool IsValid() const { return NetRefHandleManager != nullptr; }
183 };
184 FProcessQueueContext ProcessContext;
185 };
186
187
188 FNetBlobHandlerManager BlobHandlerManager;
189 FNetObjectAttachmentSendQueue AttachmentSendQueue;
191 TStrongObjectPtr<UPartialNetObjectAttachmentHandler> PartialNetObjectAttachmentHandler;
192 TStrongObjectPtr<UNetObjectBlobHandler> NetObjectBlobHandler;
193
195 mutable TMap<FName, bool> RPCWarningThrottler;
196
197 UReplicationSystem* ReplicationSystem = nullptr;
198 FObjectReferenceCache* ObjectReferenceCache = nullptr;
199 FReplicationConnections* Connections = nullptr;
200 const UPartialNetObjectAttachmentHandlerConfig* PartialNetObjectAttachmentHandlerConfig = nullptr;
201 const FNetRefHandleManager* NetRefHandleManager = nullptr;
202 bool bIsServer = false;
203 bool bSendAttachmentsWithObject = false;
204 bool bAllowObjectReplication = false;
205};
206
207}
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
UE_FORCEINLINE_HINT bool IsValid(const UObject *Test)
Definition Object.h:1875
int32 InternalIndex
Definition VulkanMemory.cpp:4036
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition StrongObjectPtrTemplates.h:26
UE_FORCEINLINE_HINT ObjectType * Get() const
Definition StrongObjectPtrTemplates.h:117
Definition NetBitArray.h:337
Definition NetBitArray.h:74
Definition NetObjectReference.h:38
Definition NetRefHandle.h:25
Definition NetBlobHandlerManager.h:11
Definition NetBlobManager.h:38
void ProcessOOBNetObjectAttachmentSendQueue(FNetBitArray &OutConnectionsPendingImmediateSend)
Definition NetBlobManager.cpp:390
bool HasAnyUnprocessedReliableAttachments() const
Definition NetBlobManager.cpp:635
void RemoveConnection(uint32 ConnectionId)
Definition NetBlobManager.cpp:411
bool RegisterNetBlobHandler(UNetBlobHandler *Handler)
Definition NetBlobManager.cpp:52
bool SendUnicastRPC(uint32 ConnectionId, const FSendRPCContext &Context, const void *Parameters, ENetObjectAttachmentSendPolicyFlags SendFlags=ENetObjectAttachmentSendPolicyFlags::None)
Definition NetBlobManager.cpp:172
void ProcessNetObjectAttachmentSendQueue(EProcessMode ProcessMode)
Definition NetBlobManager.cpp:395
const FNetBlobHandlerManager & GetNetBlobHandlerManager() const
Definition NetBlobManager.h:79
bool AllowObjectReplication() const
Definition NetBlobManager.h:46
bool HasUnprocessedReliableAttachments(FInternalNetRefIndex InternalIndex) const
Definition NetBlobManager.cpp:630
FNetBitArrayView GetConnectionsPendingImmediateSend() const
bool QueueNetObjectAttachment(uint32 ConnectionId, const FNetObjectReference &TargetRef, const TRefCountPtr< FNetObjectAttachment > &Attachment, ENetObjectAttachmentSendPolicyFlags SendFlags=ENetObjectAttachmentSendPolicyFlags::None)
Definition NetBlobManager.cpp:57
EProcessMode
Definition NetBlobManager.h:67
void AddConnection(uint32 ConnectionId)
Definition NetBlobManager.cpp:406
const UNetObjectBlobHandler * GetNetObjectBlobHandler() const
Definition NetBlobManager.h:82
FNetBlobHandlerManager & GetNetBlobHandlerManager()
Definition NetBlobManager.h:78
const UPartialNetObjectAttachmentHandler * GetPartialNetObjectAttachmentHandler() const
Definition NetBlobManager.h:81
FNetBlobManager()
Definition NetBlobManager.cpp:31
bool SendMulticastRPC(const FSendRPCContext &Context, const void *Parameters, ENetObjectAttachmentSendPolicyFlags SendFlags=ENetObjectAttachmentSendPolicyFlags::None)
Definition NetBlobManager.cpp:107
void ResetNetObjectAttachmentSendQueue()
Definition NetBlobManager.cpp:401
Definition AttachmentReplication.h:47
Definition NetRefHandleManager.h:72
@ InvalidInternalIndex
Definition NetRefHandleManager.h:75
Definition ReplicationConnections.h:32
Definition Class.h:2476
Definition NetBlobHandler.h:44
Definition NetObjectBlobHandler.h:32
Definition NetRPCHandler.h:29
Definition Object.h:95
Definition PartialNetObjectAttachmentHandler.h:11
Definition PartialNetObjectAttachmentHandler.h:44
Definition ReplicationSystem.h:70
Definition OverriddenPropertySet.cpp:45
Definition NetworkVersion.cpp:28
uint32 FInternalNetRefIndex
Definition ReplicationStateStorage.h:20
Definition NetworkVersion.cpp:28
ENetObjectAttachmentSendPolicyFlags
Definition ReplicationSystemTypes.h:52
Definition NetBlobManager.h:32
UReplicationSystem * ReplicationSystem
Definition NetBlobManager.h:33
bool bSendAttachmentsWithObject
Definition NetBlobManager.h:34
const UObject * RootObject
Definition NetBlobManager.h:52
const UFunction * Function
Definition NetBlobManager.h:54
const UObject * SubObject
Definition NetBlobManager.h:53