UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ReplicationStateDescriptor.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"
8#include <atomic>
9
11class FProperty;
12class FString;
13namespace UE::Net
14{
15 struct FNetDebugName;
16 struct FNetSerializer;
17 typedef uint64 FRepTag;
20
22 typedef FReplicationFragment* (*CreateAndRegisterReplicationFragmentFunc)(UObject* Owner, const FReplicationStateDescriptor* Descriptor, FFragmentRegistrationContext& Context);
23}
24
25namespace UE::Net
26{
27
28// MemberDescriptors - Offset to where to find member data in both external and internal representation
30{
31 uint32 ExternalMemberOffset; // this is our offset in the external state
32 uint32 InternalMemberOffset; // this is the internal offset
33};
34
35// MemberSerializer - What serializer and config to use for the given member
41
54
59
61{
63 // Which member in the replication state
65 // When we propagate tags from a struct in a replication state we need to know how to get additional tag information. ~0 means invalid.
67};
68
74
75// MemberChangeMaskDescriptor - Data needed for tracking of dirty members
77{
78 uint16 BitOffset; // Offset in the change mask where we store the bits for the member
79 uint16 BitCount; // BitCount, In most cases we have one dirty bit per member but we will support assigning more bits for specific member in order to support dirty member tracking for arrays etc.
80};
81
83{
85 {
86 Invalid = 0U, // Invalid, used when encoding references contained in dynamic memory, we identify them by setting the ResolveType to Invalid
87 ResolveOnClient, // This reference should be resolved on the client - Default behavior
88 MustExistOnClient, // This reference must be acknowledged by client before server replicates object with reference
89 ResolveOnlyWhenRecvd, // This reference will only be resolved if it exists when we receive the data, if it is unresolvable client will set it to nullptr and not try to resolve it again until it gets replicated the next time
90 };
91
94
97};
98
99// We store information about all members that store references to other objects in order to allow us to quickly iterate over all references
101{
102 uint32 Offset; // If data is in an dynamic array this contains offset to ArrayMember, if ref is in the StateBuffer the offset is to the reference itself
103
104 FNetReferenceInfo Info; // Actual info about the reference
105
106 uint16 MemberIndex; // Member index for this reference
107 uint16 InnerReferenceIndex; // if set to something else than ~0 this means that this is a nested reference
108};
109
110// Per member debug descriptor, not strictly needed as long as we have the property list
115
117{
118 uint64 Value; // Currently this is a CityHash of the name of the state
119 uint64 DefaultStateHash; // Currently this is a CityHash of the serialized default state
120
121 // We currently do not include the DefaultStateHash when comparing FReplicationStateIdentifier as we might make it optional
122 bool operator==(const FReplicationStateIdentifier& Other)const { return Value == Other.Value; }
123 bool operator<(const FReplicationStateIdentifier& Other)const { return Value < Other.Value; }
124 bool operator!=(const FReplicationStateIdentifier& Other)const { return Value != Other.Value; }
125};
126
128{
129 return ::GetTypeHash(Identifier.Value);
130}
131
133{
134 // This is a more compact storage form of ELifetimeCondition
136};
137
142{
143 enum : uint16
144 {
145 InvalidEntry = 65535U,
146 };
147
148 // MemberIndex whose property RepIndex matches the index of this entry. ~0 if this entry is invalid.
150};
151
152// Additional data required to call RepNotifies etc
158
159//
160// Behavior / Feature Traits
161//
163{
164 None = 0U,
165 InitOnly = 1U,
166 // LifetimeConditionals is backward compatibility with EReplicationCondition.
181 // Whether delta compression is supported or not
184 // Whether this is a descriptor for a struct derived from something with a NetSerializer, but doesn't have a custom NetSerializer itself.
187};
189
190// Required functions to construct and destruct external state in the provided buffer
193
194// A ReplicationState is our replication primitive, all members of a ReplicationState has the same high level conditional,
195// i.e. connection level, IsInit, and has the same owner
196// filtering on the block level might be Initial, Connection, Owner
197// Within a ReplicationState we do we also support per member conditionals
199{
200 // RefCounting required for runtime created descriptors
201 IRISCORE_API void AddRef() const;
202 IRISCORE_API void Release() const;
203
206
210
217
219
220 // This should possibly be moved to its own external descriptor as we do not want to rely on UProperties if we can.
221 // Currently we need this since we do not know anything about the external types.
223
224 // Additional data associated with applying state data for properties
225 // We keep this in a separate array as we might only need this if we can receive data
227
228 // Non-null if trait HasLifetimeConditionals is set.
230
231 // Non-null if RepIndexCount > 0
233
234 // Non-null for derived struct descriptors.
236
237 // Optional debug info
240
241 uint32 ExternalSize; // Size of the external representation including alignment
242 uint32 InternalSize; // Size of the internal representation including alignment
245
248
251
252 // How many RepIndex to MemberIndex entries there are.
254
255 // How many bits do we need for our tracking of dirty changes
257
258 // This is the offset to where we store data for ChangeMask, ConditionalChangeMask and MemberPollMask in the external state.
259 // Retrieve offset with helper methods, GetChangeMaskOffset(), GetConditionalChangeMaskOffset(), GetMemberPollMaskOffset()
261
262 // We need to assign a unique key that is stable between server and client (name hash of class + state type for now)
264
265 // Function to construct external state representation in a preallocated buffer
267
268 // Function to destruct external state representation
270
271 // Function used to construct custom replication fragments
273
275
276 mutable std::atomic<int32> RefCount;
277
278 // Pointer to default state buffer, must be explicitly destroyed if set since it might contain dynamic data
280};
281
282IRISCORE_API void DescribeReplicationDescriptor(FString& OutString, const FReplicationStateDescriptor* Descriptor);
283
284}
285
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UnrealType.h:174
Definition ReplicationFragment.h:244
Definition ReplicationFragment.h:176
Definition Class.h:2476
Definition Object.h:95
Definition Class.h:1720
@ None
Definition ReplicationDataStreamDebug.h:25
Definition NetworkVersion.cpp:28
void(* ConstructReplicationStateFunc)(uint8 *Buffer, const FReplicationStateDescriptor *Descriptor)
Definition ReplicationStateDescriptor.h:191
void(* DestructReplicationStateFunc)(uint8 *Buffer, const FReplicationStateDescriptor *Descriptor)
Definition ReplicationStateDescriptor.h:192
uint64 FRepTag
Definition ReplicationStateDescriptor.h:17
void DescribeReplicationDescriptor(FString &OutString, const FReplicationStateDescriptor *Descriptor)
Definition ReplicationStateDescriptor.cpp:19
FReplicationFragment *(* CreateAndRegisterReplicationFragmentFunc)(UObject *Owner, const FReplicationStateDescriptor *Descriptor, FFragmentRegistrationContext &Context)
Definition CoreNet.h:55
uint32 GetTypeHash(const FNetIDVariant &NetID)
Definition NetIDVariant.h:55
EReplicationStateMemberTraits
Definition ReplicationStateDescriptor.h:43
EReplicationStateTraits
Definition ReplicationStateDescriptor.h:163
Definition NetSerializerConfig.h:17
Definition NetDebugName.h:17
Definition ReplicationStateDescriptor.h:83
EResolveType ResolveType
Definition ReplicationStateDescriptor.h:95
EResolveType
Definition ReplicationStateDescriptor.h:85
@ ResolveOnlyWhenRecvd
Definition ReplicationStateDescriptor.h:89
@ ResolveOnClient
Definition ReplicationStateDescriptor.h:87
@ Invalid
Definition ReplicationStateDescriptor.h:86
@ MustExistOnClient
Definition ReplicationStateDescriptor.h:88
uint8 Padding
Definition ReplicationStateDescriptor.h:96
FNetReferenceInfo(FNetReferenceInfo::EResolveType InResolveType)
Definition ReplicationStateDescriptor.h:93
FNetReferenceInfo()
Definition ReplicationStateDescriptor.h:92
Definition NetSerializer.h:377
Definition ReplicationStateDescriptor.h:199
uint32 ExternalSize
Definition ReplicationStateDescriptor.h:241
const UScriptStruct * BaseStruct
Definition ReplicationStateDescriptor.h:235
DestructReplicationStateFunc DestructReplicationState
Definition ReplicationStateDescriptor.h:269
const FReplicationStateMemberDebugDescriptor * MemberDebugDescriptors
Definition ReplicationStateDescriptor.h:239
uint16 ChangeMaskBitCount
Definition ReplicationStateDescriptor.h:256
CreateAndRegisterReplicationFragmentFunc CreateAndRegisterReplicationFragmentFunction
Definition ReplicationStateDescriptor.h:272
uint32 GetConditionalChangeMaskOffset() const
Definition ReplicationStateDescriptor.h:208
const FReplicationStateMemberRepIndexToMemberIndexDescriptor * MemberRepIndexToMemberIndexDescriptors
Definition ReplicationStateDescriptor.h:232
uint32 GetChangeMaskOffset() const
Definition ReplicationStateDescriptor.h:207
const FReplicationStateMemberTagDescriptor * MemberTagDescriptors
Definition ReplicationStateDescriptor.h:216
const FReplicationStateMemberFunctionDescriptor * MemberFunctionDescriptors
Definition ReplicationStateDescriptor.h:215
uint16 ExternalAlignment
Definition ReplicationStateDescriptor.h:243
const FReplicationStateMemberPropertyDescriptor * MemberPropertyDescriptors
Definition ReplicationStateDescriptor.h:226
uint32 ChangeMasksExternalOffset
Definition ReplicationStateDescriptor.h:260
uint32 InternalSize
Definition ReplicationStateDescriptor.h:242
const FProperty ** MemberProperties
Definition ReplicationStateDescriptor.h:222
EReplicationStateTraits Traits
Definition ReplicationStateDescriptor.h:274
std::atomic< int32 > RefCount
Definition ReplicationStateDescriptor.h:276
const FReplicationStateMemberChangeMaskDescriptor * MemberChangeMaskDescriptors
Definition ReplicationStateDescriptor.h:212
FReplicationStateIdentifier DescriptorIdentifier
Definition ReplicationStateDescriptor.h:263
IRISCORE_API void AddRef() const
Definition ReplicationStateDescriptor.cpp:51
const FReplicationStateMemberReferenceDescriptor * MemberReferenceDescriptors
Definition ReplicationStateDescriptor.h:218
bool HasObjectReference() const
Definition ReplicationStateDescriptor.h:205
const FReplicationStateMemberLifetimeConditionDescriptor * MemberLifetimeConditionDescriptors
Definition ReplicationStateDescriptor.h:229
uint16 ObjectReferenceCount
Definition ReplicationStateDescriptor.h:250
uint16 MemberCount
Definition ReplicationStateDescriptor.h:246
uint16 FunctionCount
Definition ReplicationStateDescriptor.h:247
const FReplicationStateMemberDescriptor * MemberDescriptors
Definition ReplicationStateDescriptor.h:211
uint16 TagCount
Definition ReplicationStateDescriptor.h:249
const FReplicationStateMemberSerializerDescriptor * MemberSerializerDescriptors
Definition ReplicationStateDescriptor.h:213
IRISCORE_API void Release() const
Definition ReplicationStateDescriptor.cpp:66
const FNetDebugName * DebugName
Definition ReplicationStateDescriptor.h:238
uint32 GetMemberPollMaskOffset() const
Definition ReplicationStateDescriptor.h:209
ConstructReplicationStateFunc ConstructReplicationState
Definition ReplicationStateDescriptor.h:266
uint16 RepIndexCount
Definition ReplicationStateDescriptor.h:253
uint16 InternalAlignment
Definition ReplicationStateDescriptor.h:244
const FReplicationStateMemberTraitsDescriptor * MemberTraitsDescriptors
Definition ReplicationStateDescriptor.h:214
const uint8 * DefaultStateBuffer
Definition ReplicationStateDescriptor.h:279
bool IsInitState() const
Definition ReplicationStateDescriptor.h:204
Definition ReplicationStateDescriptor.h:117
bool operator==(const FReplicationStateIdentifier &Other) const
Definition ReplicationStateDescriptor.h:122
bool operator!=(const FReplicationStateIdentifier &Other) const
Definition ReplicationStateDescriptor.h:124
uint64 Value
Definition ReplicationStateDescriptor.h:118
bool operator<(const FReplicationStateIdentifier &Other) const
Definition ReplicationStateDescriptor.h:123
uint64 DefaultStateHash
Definition ReplicationStateDescriptor.h:119
Definition ReplicationStateDescriptor.h:77
uint16 BitOffset
Definition ReplicationStateDescriptor.h:78
uint16 BitCount
Definition ReplicationStateDescriptor.h:79
Definition ReplicationStateDescriptor.h:112
const FNetDebugName * DebugName
Definition ReplicationStateDescriptor.h:113
Definition ReplicationStateDescriptor.h:30
uint32 InternalMemberOffset
Definition ReplicationStateDescriptor.h:32
uint32 ExternalMemberOffset
Definition ReplicationStateDescriptor.h:31
Definition ReplicationStateDescriptor.h:70
const UFunction * Function
Definition ReplicationStateDescriptor.h:71
const FReplicationStateDescriptor * Descriptor
Definition ReplicationStateDescriptor.h:72
Definition ReplicationStateDescriptor.h:133
int8 Condition
Definition ReplicationStateDescriptor.h:135
Definition ReplicationStateDescriptor.h:154
uint16 ArrayIndex
Definition ReplicationStateDescriptor.h:156
const UFunction * RepNotifyFunction
Definition ReplicationStateDescriptor.h:155
Definition ReplicationStateDescriptor.h:101
FNetReferenceInfo Info
Definition ReplicationStateDescriptor.h:104
uint32 Offset
Definition ReplicationStateDescriptor.h:102
uint16 InnerReferenceIndex
Definition ReplicationStateDescriptor.h:107
uint16 MemberIndex
Definition ReplicationStateDescriptor.h:106
Definition ReplicationStateDescriptor.h:142
uint16 MemberIndex
Definition ReplicationStateDescriptor.h:149
@ InvalidEntry
Definition ReplicationStateDescriptor.h:145
Definition ReplicationStateDescriptor.h:37
const FNetSerializer * Serializer
Definition ReplicationStateDescriptor.h:38
const FNetSerializerConfig * SerializerConfig
Definition ReplicationStateDescriptor.h:39
Definition ReplicationStateDescriptor.h:61
uint16 MemberIndex
Definition ReplicationStateDescriptor.h:64
uint16 InnerTagIndex
Definition ReplicationStateDescriptor.h:66
FRepTag Tag
Definition ReplicationStateDescriptor.h:62
Definition ReplicationStateDescriptor.h:56
EReplicationStateMemberTraits Traits
Definition ReplicationStateDescriptor.h:57