UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RemoteObjectTypes.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
7#include "Containers/Array.h"
10
11class UObjectBase;
12class UObject;
13class FArchive;
14
15namespace UE::Net
16{
17 struct FRemoteObjectReferenceNetSerializer;
18 struct FRemoteServerIdNetSerializer;
19 struct FRemoteObjectIdNetSerializer;
20}
22{
23 struct FRemoteIdLocalizationHelper;
24}
25
28
31
33{
34 Invalid = 0,
37
38 Database = Max,
39 Asset = Max - 1,
40 Local = Max - 2,
41
42 // Add new reserved server IDs above this line in a descending order (so the next would be Something = Max - 2)
43
46};
47
49{
50 friend struct FRemoteObjectId;
55
56 FRemoteServerId() = default;
59
64
65 UE_DEPRECATED(5.6, "Use FRemoteServerId::FromIdNumber(uint32) instead.")
67 : Id(0)
68 {
69 *this = FromIdNumber(InId);
70 }
71
72 UE_DEPRECATED(5.6, "Use FRemoteServerId::FromString(const FStringView&) instead.")
73 explicit COREUOBJECT_API FRemoteServerId(const FString& InText);
74
76 COREUOBJECT_API FString ToString() const;
77
79 {
80 return GetGlobalized().Id;
81 }
82
83 bool IsValid() const
84 {
86 }
87
89 {
90 VerifyComparableServerIds(Id, Other.Id);
91 return (int32)GlobalizeId(Id) - (int32)GlobalizeId(Other.Id);
92 }
93
95 {
96 return Compare(Other) == 0;
97 }
99 {
100 return Compare(Other) != 0;
101 }
103 {
104 return Compare(Other) < 0;
105 }
107 {
108 return Compare(Other) <= 0;
109 }
110 bool IsAsset() const
111 {
113 }
114 bool IsDatabase() const
115 {
117 }
118 bool IsLocal() const
119 {
120 return (Id == (uint32)ERemoteServerIdConstants::Local) || (*this == GlobalServerId);
121 }
122
127
129
131
133
135
137 COREUOBJECT_API bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess);
138
140 {
141 return ::GetTypeHash(GetLocalized().Id);
142 }
143
145
146private:
147
148 inline FRemoteServerId GetLocalized() const
149 {
150 return (Id == GlobalServerId.Id) ? FRemoteServerId(ERemoteServerIdConstants::Local) : *this;
151 }
152
153 inline FRemoteServerId GetGlobalized() const
154 {
156 {
157 checkf(GlobalServerId.Id != (uint32)ERemoteServerIdConstants::Local, TEXT("Unable to convert Local server id to global. Global server id hasn't been initialized yet."));
158 return GlobalServerId;
159 }
160 return *this;
161 }
162
163 inline static void VerifyComparableServerIds(uint32 Id0, uint32 Id1)
164 {
165#if DO_CHECK
167 {
169 TEXT("When the global server id is not initialized it's only possible to compare predefined server IDs (lhs: %u, rhs: %u)"), Id0, Id1);
171 TEXT("When the global server id is not initialized it's only possible to compare predefined server IDs (lhs: %u, rhs: Local)"), Id0, Id1);
172 }
173#endif
174 }
175
176 inline static uint32 GlobalizeId(uint32 InId)
177 {
179 {
180 return GlobalServerId.Id;
181 }
182 return InId;
183 }
184
189 : Id(InId)
190 {
191 }
192
194
195 COREUOBJECT_API static FRemoteServerId GlobalServerId;
196};
197
199{
200 Default = 0,
201 Id = 1,
202 Name = 2,
203 PathName = 3,
204 FullName = 4,
206
208 Max = LastPlusOne - 1
209};
210
212{
213private:
214 union
215 {
216 struct
217 {
218 uint64 Reserved : 1; /* Reserved for static flag in NetGUID */
221 };
223 };
224
225 inline int64 GetComparableValue() const
226 {
227 return int64(SerialNumber) | (int64(FRemoteServerId::GlobalizeId(ServerId)) << REMOTE_OBJECT_SERIAL_NUMBER_BIT_SIZE);
228 }
229
230 inline int64 Compare(FRemoteObjectId Other) const
231 {
232 FRemoteServerId::VerifyComparableServerIds(ServerId, Other.ServerId);
233 return GetComparableValue() - Other.GetComparableValue();
234 }
235
236 inline FRemoteObjectId GetLocalized() const
237 {
238 return FRemoteObjectId(GetServerId().GetLocalized(), SerialNumber);
239 }
240
241 inline FRemoteObjectId GetGlobalized() const
242 {
243 return FRemoteObjectId(GetServerId().GetGlobalized(), SerialNumber);
244 }
245
246public:
247
248 enum
249 {
251 };
252
253 FRemoteObjectId() = default;
254
261
271
272 explicit COREUOBJECT_API FRemoteObjectId(const UObjectBase* InObject);
273
275 {
276 return ::GetTypeHash(GetLocalized().Id);
277 }
278
280 {
281 // Don't compare against the Reserved bit
282 return Compare(Other) == 0;
283 }
285 {
286 // Don't compare against the Reserved bit
287 return Compare(Other) != 0;
288 }
290 {
291 return Compare(Other) < 0;
292 }
294 {
295 return Compare(Other) <= 0;
296 }
298 {
299 return Compare(Other) > 0;
300 }
302 {
303 return Compare(Other) >= 0;
304 }
306 {
307 return *this != FRemoteObjectId();
308 }
309
311 {
312 return GetGlobalized().Id;
313 }
314
319
321 {
322 return GetServerId().IsAsset();
323 }
324
326 {
327 return GetServerId().IsLocal();
328 }
329
332
334
336 COREUOBJECT_API bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess);
337
342 friend struct FUObjectItem;
343 friend class FNetGUIDCache;
344};
345
347{
348 return ObjectId.GetTypeHash();
349}
350
352{
353 return ServerId.GetTypeHash();
354}
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_WITH_REMOTE_OBJECT_HANDLE
Definition CoreMiscDefines.h:620
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EInternalObjectFlags
Definition ObjectMacros.h:631
constexpr int32 REMOTE_OBJECT_SERVER_ID_BIT_SIZE
Definition RemoteObjectTypes.h:26
constexpr uint64 MAX_REMOTE_OBJECT_SERIAL_NUMBER
Definition RemoteObjectTypes.h:30
constexpr int32 REMOTE_OBJECT_SERIAL_NUMBER_BIT_SIZE
Definition RemoteObjectTypes.h:27
UE_FORCEINLINE_HINT uint32 GetTypeHash(const FRemoteObjectId &ObjectId)
Definition RemoteObjectTypes.h:346
ERemoteServerIdConstants
Definition RemoteObjectTypes.h:33
ERemoteIdToStringVerbosity
Definition RemoteObjectTypes.h:199
constexpr uint64 MAX_REMOTE_OBJECT_SERVER_ID
Definition RemoteObjectTypes.h:29
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition PackageMapClient.h:195
Definition UObjectBase.h:59
Definition Object.h:95
Definition CoreNet.h:191
Definition NetworkVersion.cpp:28
Definition RemoteObject.cpp:78
Definition RemoteObjectTypes.h:212
UE_FORCEINLINE_HINT bool IsLocal() const
Definition RemoteObjectTypes.h:325
UE_FORCEINLINE_HINT bool operator<(const FRemoteObjectId &Other) const
Definition RemoteObjectTypes.h:289
UE_FORCEINLINE_HINT FRemoteServerId GetServerId() const
Definition RemoteObjectTypes.h:315
UE_FORCEINLINE_HINT bool operator>(const FRemoteObjectId &Other) const
Definition RemoteObjectTypes.h:297
uint64 SerialNumber
Definition RemoteObjectTypes.h:219
FRemoteObjectId()=default
uint64 Reserved
Definition RemoteObjectTypes.h:218
UE_FORCEINLINE_HINT uint32 GetTypeHash() const
Definition RemoteObjectTypes.h:274
UE_FORCEINLINE_HINT bool IsAsset() const
Definition RemoteObjectTypes.h:320
UE_FORCEINLINE_HINT bool operator!=(const FRemoteObjectId &Other) const
Definition RemoteObjectTypes.h:284
UE_FORCEINLINE_HINT bool operator<=(const FRemoteObjectId &Other) const
Definition RemoteObjectTypes.h:293
uint64 Id
Definition RemoteObjectTypes.h:222
UE_FORCEINLINE_HINT bool operator>=(const FRemoteObjectId &Other) const
Definition RemoteObjectTypes.h:301
static COREUOBJECT_API FRemoteObjectId Generate(UObjectBase *InObject, const TCHAR *InName, EInternalObjectFlags InInitialFlags=EInternalObjectFlags::None)
Definition RemoteObject.cpp:879
static COREUOBJECT_API FRemoteObjectId FromString(const FStringView &InText)
Definition RemoteObject.cpp:1043
UE_FORCEINLINE_HINT bool operator==(const FRemoteObjectId &Other) const
Definition RemoteObjectTypes.h:279
COREUOBJECT_API bool NetSerialize(FArchive &Ar, class UPackageMap *Map, bool &bOutSuccess)
Definition RemoteObject.cpp:1105
@ RemoteObjectSupportCompiledIn
Definition RemoteObjectTypes.h:250
uint64 ServerId
Definition RemoteObjectTypes.h:220
UE_FORCEINLINE_HINT uint64 GetIdNumber() const
Definition RemoteObjectTypes.h:310
static FRemoteObjectId CreateFromInt(uint64 InRawId)
Definition RemoteObjectTypes.h:255
UE_FORCEINLINE_HINT bool IsValid() const
Definition RemoteObjectTypes.h:305
FRemoteObjectId(FRemoteServerId InServerId, uint64 InSerialNumber)
Definition RemoteObjectTypes.h:262
friend COREUOBJECT_API FArchive & operator<<(FArchive &Ar, FRemoteObjectId &Id)
Definition RemoteObject.cpp:1110
Definition RemoteObjectTypes.h:49
static COREUOBJECT_API void InitGlobalServerId(FRemoteServerId Id)
Definition RemoteObject.cpp:60
uint32 GetIdNumber() const
Definition RemoteObjectTypes.h:78
UE_FORCEINLINE_HINT uint32 GetTypeHash() const
Definition RemoteObjectTypes.h:139
int32 Compare(FRemoteServerId Other) const
Definition RemoteObjectTypes.h:88
bool IsDatabase() const
Definition RemoteObjectTypes.h:114
bool IsLocal() const
Definition RemoteObjectTypes.h:118
FRemoteServerId(const FRemoteServerId &)=default
FRemoteServerId()=default
COREUOBJECT_API FString ToString() const
Definition RemoteObject.cpp:1167
bool operator<(FRemoteServerId Other) const
Definition RemoteObjectTypes.h:102
COREUOBJECT_API bool NetSerialize(FArchive &Ar, class UPackageMap *Map, bool &bOutSuccess)
Definition RemoteObject.cpp:1209
static COREUOBJECT_API bool IsGlobalServerIdInitialized()
Definition RemoteObject.cpp:68
static UE_FORCEINLINE_HINT FRemoteServerId GetLocalServerId()
Definition RemoteObjectTypes.h:123
bool operator!=(FRemoteServerId Other) const
Definition RemoteObjectTypes.h:98
static COREUOBJECT_API FRemoteServerId FromIdNumber(uint32 InNumber)
Definition RemoteObject.cpp:1116
bool operator==(FRemoteServerId Other) const
Definition RemoteObjectTypes.h:94
friend void AssignGlobalServerIdDebuggingState()
Definition RemoteObject.cpp:52
bool operator<=(FRemoteServerId Other) const
Definition RemoteObjectTypes.h:106
bool IsAsset() const
Definition RemoteObjectTypes.h:110
static COREUOBJECT_API FRemoteServerId FromString(const FStringView &InText)
Definition RemoteObject.cpp:1129
FRemoteServerId & operator=(const FRemoteServerId &)=default
friend COREUOBJECT_API FArchive & operator<<(FArchive &Ar, FRemoteServerId &Id)
Definition RemoteObject.cpp:1214
bool IsValid() const
Definition RemoteObjectTypes.h:83
FRemoteServerId(ERemoteServerIdConstants InId)
Definition RemoteObjectTypes.h:60
Definition UObjectArray.h:50
Definition RemoteObjectIdNetSerializer.cpp:14
Definition RemoteObjectReferenceNetSerializer.cpp:16
Definition RemoteServerIdNetSerializer.cpp:13