104 UE_DEPRECATED(5.1,
"Deprecated in favor of OnReplayPlaybackFailure")
146 bool bIsPushBased =
false;
179 void*
operator new(
size_t) =
delete;
180 void*
operator new[](
size_t) =
delete;
181 void operator delete(
void*) =
delete;
182 void operator delete[](
void*) =
delete;
202 void*
operator new(
size_t) =
delete;
203 void*
operator new[](
size_t) =
delete;
204 void operator delete(
void*) =
delete;
205 void operator delete[](
void*) =
delete;
212template<
class BaseClass,
class DerivedClass>
215 return std::is_base_of_v<BaseClass, DerivedClass>;
222#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
225 UE_LOG(
LogNet,
Fatal,
TEXT(
"Attempt to replicate property '%s' that was not tagged to replicate! Please use 'Replicated' or 'ReplicatedUsing' keyword in the UPROPERTY() declaration."), *
TheProperty->GetFullName());
231#define DOREPLIFETIME_WITH_PARAMS_FAST(c,v,params) \
233 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
234 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
235 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v, 1); \
237 PRAGMA_DISABLE_DEPRECATION_WARNINGS \
238 RegisterReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, OutLifetimeProps, FixupParams<decltype(c::v)>(params)); \
239 PRAGMA_ENABLE_DEPRECATION_WARNINGS \
242#define DOREPLIFETIME_WITH_PARAMS_FAST_STATIC_ARRAY(c,v,params) \
244 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
245 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
246 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v##_STATIC_ARRAY, (int32)c::EArrayDims_Private::v); \
247 RegisterReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, OutLifetimeProps, params); \
250#define DOREPLIFETIME_WITH_PARAMS(c,v,params) \
252 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
253 FProperty* ReplicatedProperty = GetReplicatedProperty(StaticClass(), c::StaticClass(), GET_MEMBER_NAME_CHECKED(c,v)); \
254 PRAGMA_DISABLE_DEPRECATION_WARNINGS \
255 RegisterReplicatedLifetimeProperty(ReplicatedProperty, OutLifetimeProps, FixupParams<decltype(c::v)>(params)); \
256 PRAGMA_ENABLE_DEPRECATION_WARNINGS \
259#define DOREPLIFETIME(c,v) DOREPLIFETIME_WITH_PARAMS(c,v,FDoRepLifetimeParams())
262#define DOREPLIFETIME_DIFFNAMES(c,v, n) \
264 static TWeakFieldPtr<FProperty> __swp##v{}; \
265 const FProperty* sp##v = __swp##v.Get(); \
266 if (nullptr == sp##v) \
268 sp##v = GetReplicatedProperty(StaticClass(), c::StaticClass(), n); \
271 for ( int32 i = 0; i < sp##v->ArrayDim; i++ ) \
273 OutLifetimeProps.AddUnique( FLifetimeProperty( sp##v->RepIndex + i ) ); \
277#define DOREPLIFETIME_CONDITION(c,v,cond) \
279 static_assert(cond != COND_NetGroup, "COND_NetGroup cannot be used on replicated properties. Only when registering subobjects"); \
280 FDoRepLifetimeParams LocalDoRepParams; \
281 LocalDoRepParams.Condition = cond; \
282 DOREPLIFETIME_WITH_PARAMS(c,v,LocalDoRepParams); \
286#define DOREPLIFETIME_CONDITION_NOTIFY(c,v,cond,rncond) \
288 static_assert(cond != COND_NetGroup, "COND_NetGroup cannot be used on replicated properties. Only when registering subobjects"); \
289 FDoRepLifetimeParams LocalDoRepParams; \
290 LocalDoRepParams.Condition = cond; \
291 LocalDoRepParams.RepNotifyCondition = rncond; \
292 DOREPLIFETIME_WITH_PARAMS(c,v,LocalDoRepParams); \
295#define DOREPLIFETIME_ACTIVE_OVERRIDE_FAST(c,v,active) \
297 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
298 UE::Net::Private::FNetPropertyConditionManager::Get().SetPropertyActiveOverride(this, (int32)c::ENetFields_Private::v, active); \
301#define DOREPLIFETIME_ACTIVE_OVERRIDE_FAST_STATIC_ARRAY(c,v,active) \
303 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
304 UE::Net::Private::FNetPropertyConditionManager& PropertyConditionManager = UE::Net::Private::FNetPropertyConditionManager::Get(); \
305 for (int32 i = 0; i < (int32)c::EArrayDims_Private::v; ++i) \
307 PropertyConditionManager.SetPropertyActiveOverride(this, (int32)c::ENetFields_Private::v##_STATIC_ARRAY + i, active); \
311#define DOREPLIFETIME_ACTIVE_OVERRIDE(c,v,active) \
313 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
314 static FProperty* sp##v = GetReplicatedProperty(StaticClass(), c::StaticClass(),GET_MEMBER_NAME_CHECKED(c,v)); \
315 UE::Net::Private::FNetPropertyConditionManager& PropertyConditionManager = UE::Net::Private::FNetPropertyConditionManager::Get(); \
316 for (int32 i = 0; i < sp##v->ArrayDim; i++) \
318 PropertyConditionManager.SetPropertyActiveOverride(this, sp##v->RepIndex + i, active); \
322#define DOREPCUSTOMCONDITION_ACTIVE_FAST(c,v,active) \
324 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
325 OutActiveState.SetActiveState((uint16)c::ENetFields_Private::v, active); \
328#define DOREPCUSTOMCONDITION_SETACTIVE_FAST(c,v,active) \
330 UE::Net::Private::FNetPropertyConditionManager::Get().SetPropertyActive(this, (uint16)c::ENetFields_Private::v, active); \
333#define DOREPCUSTOMCONDITION_SETACTIVE_FAST_STATIC_ARRAY(c,v,active) \
335 UE::Net::Private::FNetPropertyConditionManager& PropertyConditionManager = UE::Net::Private::FNetPropertyConditionManager::Get(); \
336 for (int32 i = 0; i < (int32)c::EArrayDims_Private::v; ++i) \
338 PropertyConditionManager.SetPropertyActive(this, (uint16)c::ENetFields_Private::v##_STATIC_ARRAY + i, active); \
343#define DOREPDYNAMICCONDITION_INITCONDITION_FAST(c,v,cond) \
345 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
346 OutActiveState.SetDynamicCondition((uint16)c::ENetFields_Private::v, cond); \
353#define DOREPDYNAMICCONDITION_SETCONDITION_FAST(c,v,cond) \
355 UE::Net::Private::FNetPropertyConditionManager::Get().SetPropertyDynamicCondition(this, (uint16)c::ENetFields_Private::v, cond); \
375 template <
typename T,
typename...>
376 auto Requires(T* FastArray) ->
decltype(FastArray->GetFastArrayCreateReplicationFragmentFunction());
383 if (Params.CreateAndRegisterReplicationFragmentFunction)
389 NewParams.CreateAndRegisterReplicationFragmentFunction = T::GetFastArrayCreateReplicationFragmentFunction();
407#define DISABLE_REPLICATED_PROPERTY(c,v) \
408DisableReplicatedLifetimeProperty(StaticClass(), c::StaticClass(), GET_MEMBER_NAME_CHECKED(c,v), OutLifetimeProps);
411#define DISABLE_REPLICATED_PRIVATE_PROPERTY(c,v) \
412DisableReplicatedLifetimeProperty(StaticClass(), c::StaticClass(), FName(TEXT(#v)), OutLifetimeProps);
414#define DISABLE_REPLICATED_PROPERTY_FAST(c,v) \
416 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
417 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
418 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v, 1); \
419 DisableReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, OutLifetimeProps); \
422#define DISABLE_REPLICATED_PROPERTY_FAST_STATIC_ARRAY(c,v) \
424 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
425 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
426 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v##_STATIC_ARRAY, (int32)c::EArrayDims_Private::v); \
427 DisableReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, OutLifetimeProps); \
433#define DISABLE_ALL_CLASS_REPLICATED_PROPERTIES(c, SuperClassBehavior) \
434DisableAllReplicatedPropertiesOfClass(StaticClass(), c::StaticClass(), SuperClassBehavior, OutLifetimeProps);
436#define DISABLE_ALL_CLASS_REPLICATED_PROPERTIES_FAST(c, SuperClassBehavior) \
438 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), "DISABLE_ALL_CLASS_REPLICATED_PROPERTIES"); \
439 const TCHAR* DoRepClassName_##c(TEXT(#c)); \
440 const NetworkingPrivate::FRepClassDescriptor ClassDescriptor_##c(DoRepClassName_##c, (int32)c::ENetFields_Private::NETFIELD_REP_START, (int32)c::ENetFields_Private::NETFIELD_REP_END); \
441 DisableAllReplicatedPropertiesOfClass(ClassDescriptor_##c, SuperClassBehavior, OutLifetimeProps); \
455#define RESET_REPLIFETIME_CONDITION(c,v,cond) ResetReplicatedLifetimeProperty(StaticClass(), c::StaticClass(), GET_MEMBER_NAME_CHECKED(c,v), cond, OutLifetimeProps);
457#define RESET_REPLIFETIME(c,v) RESET_REPLIFETIME_CONDITION(c, v, COND_None)
459#define RESET_REPLIFETIME_CONDITION_FAST(c,v,cond) \
461 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
462 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
463 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v, 1); \
464 ResetReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, cond, OutLifetimeProps); \
467#define RESET_REPLIFETIME_CONDITION_FAST_STATIC_ARRAY(c,v,cond) \
469 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
470 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
471 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v##_STATIC_ARRAY, (int32)c::EArrayDims_Private::v); \
472 ResetReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, cond, OutLifetimeProps); \
475#define RESET_REPLIFETIME_FAST(c,v) RESET_REPLIFETIME_CONDITION_FAST(c, v, COND_None)
476#define RESET_REPLIFETIME_FAST_STATIC_ARRAY(c,v) RESET_REPLIFETIME_FAST_STATIC_ARRAY(c, v, COND_None)
478#define RESET_REPLIFETIME_WITH_PARAMS(c,v,params) ResetReplicatedLifetimeProperty(StaticClass(), c::StaticClass(), GET_MEMBER_NAME_CHECKED(c,v), params, OutLifetimeProps);
480#define RESET_REPLIFETIME_FAST_WITH_PARAMS(c,v,params) \
482 static_assert(ValidateReplicatedClassInheritance<c, ThisClass>(), #c "." #v " is not accessible from this class."); \
483 const TCHAR* DoRepPropertyName_##c_##v(TEXT(#v)); \
484 const NetworkingPrivate::FRepPropertyDescriptor PropertyDescriptor_##c_##v(DoRepPropertyName_##c_##v, (int32)c::ENetFields_Private::v, 1); \
485 ResetReplicatedLifetimeProperty(PropertyDescriptor_##c_##v, params, OutLifetimeProps); \
490 const UClass* PropertyClass,
502 const UClass* PropertyClass,
519#define RPC_VALIDATE( expression ) \
520 if ( !( expression ) ) \
522 UE_LOG( LogNet, Warning, \
523 TEXT("RPC_VALIDATE Failed: ") \
524 TEXT( PREPROCESSOR_TO_STRING( expression ) ) \
526 TEXT( PREPROCESSOR_TO_STRING( __FILE__ ) ) \
528 TEXT( PREPROCESSOR_TO_STRING( __LINE__ ) ) ); \
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
ELifetimeCondition
Definition CoreNetTypes.h:20
@ COND_None
Definition CoreNetTypes.h:21
ELifetimeRepNotifyCondition
Definition CoreNetTypes.h:43
@ REPNOTIFY_OnChanged
Definition CoreNetTypes.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:58
#define DECLARE_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:48
#define DECLARE_MULTICAST_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:67
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
@ CPF_Net
Property is relevant to network replication.
Definition ObjectMacros.h:424
EReplayResult
Definition ReplayResult.h:10
ENGINE_API void RegisterReplicatedLifetimeProperty(const FProperty *ReplicatedProperty, TArray< FLifetimeProperty > &OutLifetimeProps, const FDoRepLifetimeParams &Params)
Definition UnrealNetwork.cpp:78
constexpr bool ValidateReplicatedClassInheritance()
Definition UnrealNetwork.h:213
int32 BestSignedDifference(int32 Value, int32 Reference, int32 Max)
Definition UnrealNetwork.h:36
ENGINE_API void ResetReplicatedLifetimeProperty(const UClass *ThisClass, const UClass *PropertyClass, FName PropertyName, ELifetimeCondition LifetimeCondition, TArray< FLifetimeProperty > &OutLifetimeProps)
Definition UnrealNetwork.cpp:159
TEnableIf< TModels_V< CGetFastArrayCreateReplicationFragmentFuncable, T >, constFDoRepLifetimeParams >::Type FixupParams(const FDoRepLifetimeParams &Params)
Definition UnrealNetwork.h:380
ENGINE_API void DisableAllReplicatedPropertiesOfClass(const UClass *ThisClass, const UClass *ClassToDisable, EFieldIteratorFlags::SuperClassFlags SuperClassBehavior, TArray< FLifetimeProperty > &OutLifetimeProps)
Definition UnrealNetwork.cpp:224
FProperty * GetReplicatedProperty(const UClass *CallingClass, const UClass *PropClass, const FName &PropName)
Definition UnrealNetwork.h:219
int32 MakeRelative(int32 Value, int32 Reference, int32 Max)
Definition UnrealNetwork.h:40
ENGINE_API void DisableReplicatedLifetimeProperty(const UClass *ThisClass, const UClass *PropertyClass, FName PropertyName, TArray< FLifetimeProperty > &OutLifetimeProps)
Definition UnrealNetwork.cpp:124
Definition NameTypes.h:617
Definition UnrealType.h:174
Definition UnrealString.h.inl:34
Definition NetConnection.h:284
Definition PendingNetGame.h:24
Definition EngineBaseTypes.h:739
SuperClassFlags
Definition UnrealType.h:7040
Definition UnrealNetwork.h:154
FReplicationFragment *(* CreateAndRegisterReplicationFragmentFunc)(UObject *Owner, const FReplicationStateDescriptor *Descriptor, FFragmentRegistrationContext &Context)
Definition CoreNet.h:55
Definition AdvancedWidgetsModule.cpp:13
Definition UnrealNetwork.h:374
auto Requires(T *FastArray) -> decltype(FastArray->GetFastArrayCreateReplicationFragmentFunction())
Definition UnrealNetwork.h:135
Definition UnrealNetwork.h:82
static ENGINE_API FOnWriteGameSpecificDemoHeader OnWriteGameSpecificDemoHeader
Definition UnrealNetwork.h:88
static ENGINE_API FReplayScrubTeardown OnScrubTeardown
Definition UnrealNetwork.h:85
static ENGINE_API FGetOverridableVersionDataForDemoHeaderReadDelegate GetOverridableVersionDataForHeaderRead
Definition UnrealNetwork.h:96
static ENGINE_API FOnWriteGameSpecificFrameData OnWriteGameSpecificFrameData
Definition UnrealNetwork.h:92
static ENGINE_API FOnProcessGameSpecificDemoHeader OnProcessGameSpecificDemoHeader
Definition UnrealNetwork.h:89
static ENGINE_API FGetOverridableVersionDataForDemoHeaderWriteDelegate GetOverridableVersionDataForHeaderWrite
Definition UnrealNetwork.h:97
static ENGINE_API FOnReplayStartedDelegate OnReplayStarted
Definition UnrealNetwork.h:100
static ENGINE_API FOnProcessGameSpecificFrameData OnProcessGameSpecificFrameData
Definition UnrealNetwork.h:93
static ENGINE_API FPreReplayScrub OnPreScrub
Definition UnrealNetwork.h:84
Definition ReplayTypes.h:511
Definition UnrealNetwork.h:186
const TCHAR * ClassName
Definition UnrealNetwork.h:194
FRepClassDescriptor(const TCHAR *InClassName, const int32 InStartRepIndex, const int32 InEndRepIndex)
Definition UnrealNetwork.h:187
const int32 EndRepIndex
Definition UnrealNetwork.h:196
const int32 StartRepIndex
Definition UnrealNetwork.h:195
Definition UnrealNetwork.h:156
const int32 ArrayDim
Definition UnrealNetwork.h:174
const TCHAR * PropertyName
Definition UnrealNetwork.h:172
const int32 RepIndex
Definition UnrealNetwork.h:173
FRepPropertyDescriptor(const TCHAR *InPropertyName, const int32 InRepIndex, const int32 InArrayDim)
Definition UnrealNetwork.h:165