UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DemoNetDriver.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
8#include "Misc/NetworkGuid.h"
10#include "GameFramework/Actor.h"
11#include "Misc/EngineVersion.h"
13#include "Engine/NetDriver.h"
15#include "Misc/NetworkVersion.h"
18#include "Net/RepLayout.h"
20#include "Net/ReplayResult.h"
21#include "Templates/Atomic.h"
22#include "Net/UnrealNetwork.h"
23#include "ReplayHelper.h"
24
25#include "DemoNetDriver.generated.h"
26
27class FNetworkNotify;
28class FRepState;
29class UDemoNetDriver;
30
32DECLARE_DELEGATE_OneParam(FOnGotoTimeDelegate, const bool /* bWasSuccessful */);
33
35
37UE_DEPRECATED(5.1, "No longer used")
40
43
45
47{
48public:
52
54 {
55 }
56
57 virtual void StartTask() = 0;
58 virtual bool Tick() = 0;
59 virtual FName GetName() const = 0;
60 virtual bool ShouldPausePlayback() const { return true; }
61
63};
64
66USTRUCT()
68{
70
72 UPROPERTY()
73 TObjectPtr<UObject> Archetype = nullptr;
74 FVector Location;
76 FVector Scale3D;
77 FName LevelName;
78
80 TMap<FString, TSharedPtr<FRepState>> SubObjRepState;
81
82 UPROPERTY()
83 TArray<TObjectPtr<UObject>> ObjReferences;
84
85 void CountBytes(FArchive& Ar) const
86 {
87 if (FRepState const * const LocalRepState = RepState.Get())
88 {
89 Ar.CountBytes(sizeof(FRepState), sizeof(FRepState));
90 LocalRepState->CountBytes(Ar);
91 }
92
93 SubObjRepState.CountBytes(Ar);
94 for (const auto& SubObjRepStatePair : SubObjRepState)
95 {
96 SubObjRepStatePair.Key.CountBytes(Ar);
97
98 if (FRepState const * const LocalRepState = SubObjRepStatePair.Value.Get())
99 {
100 const SIZE_T SizeOfRepState = sizeof(FRepState);
101 Ar.CountBytes(SizeOfRepState, SizeOfRepState);
102 LocalRepState->CountBytes(Ar);
103 }
104 }
105
106 ObjReferences.CountBytes(Ar);
107 }
108};
109
111{
113 const TWeakObjectPtr<const UObject>& InObject,
116
118
122
123 void CountBytes(FArchive& Ar) const
124 {
125 // The RepLayout for this object should still be stored by the UDemoNetDriver,
126 // so we don't need to count it here.
127
129 }
130};
131
133
134USTRUCT()
136{
138
139 UPROPERTY()
140 FString FuncPathName;
141
142 UPROPERTY()
143 bool bServerSkip = false;
144
145 UPROPERTY()
146 bool bClientSkip = false;
147};
148
152UCLASS(transient, config=Engine, MinimalAPI)
154{
156
157public:
161
162 ENGINE_API virtual void SetWorld(class UWorld* InWorld) override;
163
165 int32 GetDemoFrameNum() const { return ReplayHelper.DemoFrameNum; }
166
167 bool GetChannelsArePaused() const { return bChannelsArePaused; }
168
169 double GetCurrentLevelIndex() const { return ReplayHelper.CurrentLevelIndex; }
170
172 {
173 ReplayHelper.CurrentLevelIndex = Index;
174 }
175
176 APlayerController* GetSpectatorController() const { return SpectatorController; }
177
178private:
179
181 APlayerController* SpectatorController;
182
185
186public:
188
189 uint32 GetDemoCurrentTimeInMS() const { return (uint32)((double)GetDemoCurrentTime() * 1000); }
190
196
197private:
203 TMap<FString, FRollbackNetStartupActorInfo> RollbackNetStartupActors;
204
205public:
206 double GetLastCheckpointTime() const { return ReplayHelper.LastCheckpointTime; }
207
209 {
210 ReplayHelper.LastCheckpointTime = CheckpointTime;
211 }
212
213 ENGINE_API void RespawnNecessaryNetStartupActors(TArray<AActor*>& SpawnedActors, ULevel* Level = nullptr);
214
215private:
217
218 ENGINE_API void InitDefaults();
219
220 ENGINE_API bool LoadCheckpoint(const FGotoResult& GotoResult);
221
222 TArray<TUniquePtr<FDeltaCheckpointData>> PlaybackDeltaCheckpointData;
223
225
226public:
227
232
233 ENGINE_API virtual void Serialize(FArchive& Ar) override;
234
236 ENGINE_API bool IsSavingCheckpoint() const;
237 bool IsLoadingCheckpoint() const { return ReplayHelper.bIsLoadingCheckpoint; }
238
239 ENGINE_API bool IsPlayingClientReplay() const;
240
243
244 bool IsRecordingMapChanges() const { return ReplayHelper.bRecordMapChanges; }
245
246 ENGINE_API void RequestCheckpoint();
247
248private:
249 struct FDemoActorPriority
250 {
251 FActorPriority ActorPriority;
252 UObject* Level;
253 };
254
255 bool bIsFastForwarding;
256 bool bIsFinalizingFastForward;
257 bool bIsRestoringStartupActors;
258
260 uint8 bChannelsArePaused : 1;
261 uint8 bIsFastForwardingForCheckpoint : 1;
262 uint8 bWasStartStreamingSuccessful : 1;
263
265 uint8 bPrioritizeActors : 1;
266
267protected:
270
272
273private:
274 TArray<FNetworkGUID> NonQueuedGUIDsForScrubbing;
275
276 // Replay tasks
277 TArray<TSharedRef<FQueuedReplayTask>> QueuedReplayTasks;
278 TSharedPtr<FQueuedReplayTask> ActiveReplayTask;
279 TSharedPtr<FQueuedReplayTask> ActiveScrubReplayTask;
280
282 FOnGotoTimeDelegate OnGotoTimeDelegate_Transient;
283
285 double SavedReplicatedWorldTimeSeconds;
286
288 float SavedSecondsToSkip;
289
291 FString DemoSessionID;
292
294 float MaxDesiredRecordTimeMS;
295
300 UPROPERTY(Config)
301 float CheckpointSaveMaxMSPerFrame;
302
305
307 TArray<FDemoActorPriority> PrioritizedActors;
308
310 ENGINE_API void TickFlushInternal(float DeltaSeconds);
311
313 uint32 GetLastCheckpointTimeInMS() const { return ReplayHelper.GetLastCheckpointTimeInMS(); }
314
316 ENGINE_API void TickDemoRecordFrame(float DeltaSeconds);
317
319 UPROPERTY(config)
320 TArray<FMulticastRecordOptions> MulticastRecordOptions;
321
322public:
323
324 // UNetDriver interface.
325
326 ENGINE_API virtual bool InitBase(bool bInitAsClient, FNetworkNotify* InNotify, const FURL& URL, bool bReuseAddressAndPort, FString& Error) override;
327 ENGINE_API virtual void FinishDestroy() override;
328 ENGINE_API virtual FString LowLevelGetNetworkNumber() override;
329 ENGINE_API virtual bool InitConnect(FNetworkNotify* InNotify, const FURL& ConnectURL, FString& Error) override;
330 ENGINE_API virtual bool InitListen(FNetworkNotify* InNotify, FURL& ListenURL, bool bReuseAddressAndPort, FString& Error) override;
331 ENGINE_API virtual void TickFlush(float DeltaSeconds) override;
332 ENGINE_API virtual void PostTickFlush() override;
333 ENGINE_API virtual void TickDispatch(float DeltaSeconds) override;
334 ENGINE_API virtual void ProcessRemoteFunction(class AActor* Actor, class UFunction* Function, void* Parameters, struct FOutParmRec* OutParms, struct FFrame* Stack, class UObject* SubObject = nullptr) override;
335 virtual bool IsAvailable() const override { return true; }
336 ENGINE_API void SkipTime(const float InTimeToSkip);
337
338 UE_DEPRECATED(5.3, "Internal call will be made private in the future.")
339 ENGINE_API void SkipTimeInternal(const float SecondsToSkip, const bool InFastForward, const bool InIsForCheckpoint);
340 UE_DEPRECATED(5.3, "Internal call will be made private in the future.")
341 ENGINE_API bool InitConnectInternal(FString& Error);
342
343 ENGINE_API virtual bool ShouldClientDestroyTearOffActors() const override;
344 ENGINE_API virtual bool ShouldSkipRepNotifies() const override;
345 ENGINE_API virtual bool ShouldQueueBunchesForActorGUID(FNetworkGUID InGUID) const override;
346 ENGINE_API virtual bool ShouldIgnoreRPCs() const override;
347 ENGINE_API virtual FNetworkGUID GetGUIDForActor(const AActor* InActor) const override;
348 ENGINE_API virtual AActor* GetActorForGUID(FNetworkGUID InGUID) const override;
349 ENGINE_API virtual bool ShouldReceiveRepNotifiesForObject(UObject* Object) const override;
350 ENGINE_API virtual void ForceNetUpdate(AActor* Actor) override;
351 ENGINE_API virtual bool IsServer() const override;
352 ENGINE_API virtual bool ShouldReplicateFunction(AActor* Actor, UFunction* Function) const override;
353 ENGINE_API virtual bool ShouldReplicateActor(AActor* Actor) const override;
354 ENGINE_API virtual bool ShouldForwardFunction(AActor* Actor, UFunction* Function, void* Parms) const override;
355 ENGINE_API virtual void NotifyActorChannelOpen(UActorChannel* Channel, AActor* Actor) override;
356 ENGINE_API virtual void NotifyActorChannelCleanedUp(UActorChannel* Channel, EChannelCloseReason CloseReason) override;
357 ENGINE_API virtual void NotifyActorClientDormancyChanged(AActor* Actor, ENetDormancy OldDormancyState) override;
358 ENGINE_API virtual void NotifyActorTornOff(AActor* Actor) override;
359
360 virtual void ProcessLocalServerPackets() override {}
361 virtual void ProcessLocalClientPackets() override {}
362
363 ENGINE_API virtual void InitDestroyedStartupActors() override;
364
365 ENGINE_API virtual void SetAnalyticsProvider(TSharedPtr<IAnalyticsProvider> InProvider) override;
366
367 virtual void LowLevelSend(TSharedPtr<const FInternetAddr> Address, void* Data, int32 CountBits, FOutPacketTraits& Traits) override {}
368 virtual class ISocketSubsystem* GetSocketSubsystem() override { return nullptr; }
369
370 virtual bool DoesSupportEncryption() const override { return false; }
371
372protected:
373 ENGINE_API virtual UChannel* InternalCreateChannelByName(const FName& ChName) override;
374
375public:
377 ENGINE_API bool ContinueListen(FURL& ListenURL);
378
385 ENGINE_API void GotoTimeInSeconds(const float TimeInSeconds, const FOnGotoTimeDelegate& InOnGotoTimeDelegate = FOnGotoTimeDelegate());
386
387 ENGINE_API bool IsRecording() const;
388 ENGINE_API bool IsPlaying() const;
389
391 float GetDemoTotalTime() const { return ReplayHelper.DemoTotalTime; }
392
393 void SetDemoTotalTime(float TotalTime)
394 {
395 ReplayHelper.DemoTotalTime = TotalTime;
396 }
397
399 float GetDemoCurrentTime() const { return ReplayHelper.DemoCurrentTime; }
400
401 void SetDemoCurrentTime(float CurrentTime)
402 {
403 ReplayHelper.DemoCurrentTime = CurrentTime;
404 }
405
406 FString GetDemoURL() const { return ReplayHelper.DemoURL.ToString(); }
407
410
411 float GetMaxDesiredRecordTimeMS() const { return MaxDesiredRecordTimeMS; }
412
415
418
419 bool IsActorPrioritizationEnabled() const { return bPrioritizeActors; }
420
423 {
424 CheckpointSaveMaxMSPerFrame = InCheckpointSaveMaxMSPerFrame;
425 ReplayHelper.CheckpointSaveMaxMSPerFrame = InCheckpointSaveMaxMSPerFrame;
426 }
427
429 ENGINE_API void TickFlushAsyncEndOfFrame(float DeltaSeconds);
430
432
434 ENGINE_API FDemoSavedPropertyState SavePropertyState() const;
435
437 ENGINE_API bool ComparePropertyState(const FDemoSavedPropertyState& State) const;
438
439public:
441 virtual bool IsNetResourceValid(void) override { return true; }
442
443 ENGINE_API void TickDemoRecord(float DeltaSeconds);
444 ENGINE_API void PauseChannels(const bool bPause);
445 ENGINE_API void PauseRecording(const bool bInPauseRecording);
446 ENGINE_API bool IsRecordingPaused() const;
447
448 ENGINE_API bool ConditionallyProcessPlaybackPackets();
449 ENGINE_API void ProcessAllPlaybackPackets();
450
451 ENGINE_API bool ConditionallyReadDemoFrameIntoPlaybackPackets(FArchive& Ar);
452
453 ENGINE_API bool ProcessPacket(const uint8* Data, int32 Count);
455 {
456 return ShouldSkipPlaybackPacket(PlaybackPacket) ||
457 ProcessPacket(PlaybackPacket.Data.GetData(), PlaybackPacket.Data.Num());
458 }
459
460 ENGINE_API void WriteDemoFrameFromQueuedDemoPackets(FArchive& Ar, TArray<FQueuedDemoPacket>& QueuedPackets, float FrameTime, EWriteDemoFrameFlags Flags);
461
462 ENGINE_API void WritePacket(FArchive& Ar, uint8* Data, int32 Count);
463
464 ENGINE_API void TickDemoPlayback(float DeltaSeconds);
465
466 ENGINE_API void FinalizeFastForward(const double StartTime);
467
468 ENGINE_API void SpawnDemoRecSpectator( UNetConnection* Connection, const FURL& ListenURL);
469
477 ENGINE_API void RestoreConnectionPostScrub(APlayerController* PC, UNetConnection* NetConnection);
478
484 ENGINE_API void SetSpectatorController(APlayerController* PC);
485
486 // Splitscreen demo handling
487
496 ENGINE_API bool SpawnSplitscreenViewer(ULocalPlayer* NewPlayer, UWorld* InWorld);
497
506 ENGINE_API bool RemoveSplitscreenViewer(APlayerController* RemovePlayer, bool bMarkOwnerForDeletion=false);
507
508private:
509 // Internal splitscreen management
510
513 TArray<TObjectPtr<APlayerController>> SpectatorControllers;
514
524 ENGINE_API int32 CleanUpSplitscreenConnections(bool bDeleteOwner);
525
526public:
527
528 ENGINE_API void ResetDemoState();
529 ENGINE_API void JumpToEndOfLiveReplay();
530 ENGINE_API void AddEvent(const FString& Group, const FString& Meta, const TArray<uint8>& Data);
531 ENGINE_API void AddOrUpdateEvent(const FString& EventName, const FString& Group, const FString& Meta, const TArray<uint8>& Data);
532
533 ENGINE_API void EnumerateEvents(const FString& Group, const FEnumerateEventsCallback& Delegate);
534
535 // In most cases, this is desirable over EnumerateEvents because it will explicitly use ActiveReplayName
536 // instead of letting the streamer decide.
537 ENGINE_API void EnumerateEventsForActiveReplay(const FString& Group, const FEnumerateEventsCallback& Delegate);
538 ENGINE_API void EnumerateEventsForActiveReplay(const FString& Group, const int32 UserIndex, const FEnumerateEventsCallback& Delegate);
539
540 ENGINE_API void RequestEventData(const FString& EventID, const FRequestEventDataCallback& Delegate);
541
542 // In most cases, this is desirable over RequestEventData because it will explicitly use ActiveReplayName
543 // instead of letting the streamer decide.
544 ENGINE_API void RequestEventDataForActiveReplay(const FString& EventID, const FRequestEventDataCallback& Delegate);
545 ENGINE_API void RequestEventDataForActiveReplay(const FString& EventID, const int32 UserIndex, const FRequestEventDataCallback& Delegate);
546
548 ENGINE_API void RequestEventGroupDataForActiveReplay(const FString& Group, const FRequestEventGroupDataCallback& Delegate);
549 ENGINE_API void RequestEventGroupDataForActiveReplay(const FString& Group, const int32 UserIndex, const FRequestEventGroupDataCallback& Delegate);
550
551 bool IsFastForwarding() const { return bIsFastForwarding; }
552 bool IsFinalizingFastForward() const { return bIsFinalizingFastForward; }
553 bool IsRestoringStartupActors() const { return bIsRestoringStartupActors; }
554
555 ENGINE_API FReplayExternalDataArray* GetExternalDataArrayForObject(UObject* Object);
556
557 ENGINE_API bool SetExternalDataForObject(UObject* OwningObject, const uint8* Src, const int32 NumBits);
558
559 ENGINE_API bool ReadDemoFrameIntoPlaybackPackets(FArchive& Ar, TArray<FPlaybackPacket>& Packets, const bool bForLevelFastForward, float* OutTime);
560 bool ReadDemoFrameIntoPlaybackPackets(FArchive& Ar) { return ReadDemoFrameIntoPlaybackPackets(Ar, PlaybackPackets, false, nullptr); }
561
567 ENGINE_API void AddUserToReplay(const FString& UserString);
568
569 ENGINE_API void StopDemo();
570
571 ENGINE_API void ReplayStreamingReady(const FStartStreamingResult& Result);
572
573 ENGINE_API void AddReplayTask(FQueuedReplayTask* NewTask);
574 ENGINE_API bool IsAnyTaskPending() const;
575 ENGINE_API void ClearReplayTasks();
576 ENGINE_API bool ProcessReplayTasks();
577 ENGINE_API bool IsNamedTaskInQueue(const FName& Name) const;
578 ENGINE_API FName GetNextQueuedTaskName() const;
579
581 ENGINE_API void AddNonQueuedActorForScrubbing(AActor const* Actor);
583 ENGINE_API void AddNonQueuedGUIDForScrubbing(FNetworkGUID InGUID);
584
585 ENGINE_API virtual bool IsLevelInitializedForActor(const AActor* InActor, const UNetConnection* InConnection) const override;
586
588 ENGINE_API void NotifyGotoTimeFinished(bool bWasSuccessful);
589
590 ENGINE_API virtual void NotifyActorDestroyed(AActor* ThisActor, bool IsSeamlessTravel=false, EChannelCloseReason CloseReason = EChannelCloseReason::Destroyed) override;
591 ENGINE_API virtual void NotifyActorLevelUnloaded(AActor* Actor) override;
592 ENGINE_API virtual void NotifyStreamingLevelUnload(ULevel* InLevel) override;
593
595 ENGINE_API virtual void QueueNetStartupActorForRollbackViaDeletion(AActor* Actor);
596
598 ENGINE_API void OnSeamlessTravelStartDuringRecording(const FString& LevelName);
599
601 const FString& GetDemoSessionID() const { return DemoSessionID; }
602
604 ENGINE_API bool ShouldTickFlushAsyncEndOfFrame() const;
605
608 {
609 return ReplayHelper.HasLevelStreamingFixes();
610 }
611
614 {
615 return ReplayHelper.HasDeltaCheckpoints();
616 }
617
620 {
621 return ReplayHelper.HasGameSpecificFrameData();
622 }
623
628 const FString& GetActiveReplayName() const
629 {
630 return ReplayHelper.ActiveReplayName;
631 }
632
633 uint32 GetPlaybackDemoChangelist() const { return ReplayHelper.PlaybackDemoHeader.EngineVersion.GetChangelist(); }
634
635 UE_DEPRECATED(5.2, "Will be removed in favor of custom versions, use GetPlaybackReplayVersion instead")
636 uint32 GetPlaybackDemoVersion() const
637 {
639 return ReplayHelper.PlaybackDemoHeader.Version;
641 }
642
643 FReplayCustomVersion::Type GetPlaybackReplayVersion() const { return ReplayHelper.GetPlaybackReplayVersion(); }
644
645 uint32 GetPlaybackEngineNetworkProtocolVersion() const { return ReplayHelper.PlaybackDemoHeader.GetCustomVersion(FEngineNetworkCustomVersion::Guid); }
646 uint32 GetPlaybackGameNetworkProtocolVersion() const { return ReplayHelper.PlaybackDemoHeader.GetCustomVersion(FGameNetworkCustomVersion::Guid); }
647
648 uint32 GetPlaybackCustomVersionVersion(const FGuid& VersionGuid) const { return ReplayHelper.PlaybackDemoHeader.GetCustomVersion(VersionGuid); }
649
650 ENGINE_API FString GetDemoPath() const;
651
652private:
653
654 struct FLevelnterval
655 {
657 int32 StartIndex;
658 int32 Count;
659 int32 LevelIndex;
660 };
661
662 TArray<FLevelnterval> LevelIntervals;
663
665
667 ENGINE_API void OnRefreshHeaderCompletePrivate(const FDownloadHeaderResult& Result, int32 LevelIndex);
668
669 ENGINE_API void CleanupOutstandingRewindActors();
670
671 // Tracks actors that will need to be rewound during scrubbing.
672 // This list should always be empty outside of scrubbing.
673 TSet<FNetworkGUID> TrackedRewindActorsByGUID;
674
675 // Time of the last packet we've processed (in seconds).
676 float LastProcessedPacketTime;
677
678 // Index into PlaybackPackets array. Used so we can process many packets in one frame and avoid removing them individually.
679 int32 PlaybackPacketIndex;
680
681 // Determines whether or not a packet should be skipped, based on it's level association.
682 ENGINE_API bool ShouldSkipPlaybackPacket(const FPlaybackPacket& Packet);
683
694 ENGINE_API bool ReplicatePrioritizedActors(const FDemoActorPriority* ActorsToReplicate, uint32 Count, class FRepActorsParams& Params);
695 ENGINE_API bool ReplicatePrioritizedActor(const FActorPriority& ActorPriority, class FRepActorsParams& Params);
696
697 friend class FPendingTaskHelper;
698
699 // Manages basic setup of newly visible levels, and queuing a FastForward task if necessary.
700 ENGINE_API void PrepFastForwardLevels();
701
702 // Performs the logic for actually fast-forwarding a level.
703 ENGINE_API bool FastForwardLevels(const FGotoResult& GotoResult);
704
705 ENGINE_API void OnPostLoadMapWithWorld(UWorld* World);
706
707 // Diff Actor plus it's Components and Subobjects from given ActorChannel
708 ENGINE_API void DiffActorProperties(UActorChannel* const ActorChannel);
709
710 // Callback sent just before an actor has destroy called on itself.
711 ENGINE_API void OnActorPreDestroy(AActor* DestroyedActor);
712
713 FDelegateHandle DelegateHandleActorPreDestroy;
714
715protected:
716
717 ENGINE_API void ProcessSeamlessTravel(int32 LevelIndex);
718
719 ENGINE_API bool DemoReplicateActor(AActor* Actor, UNetConnection* Connection, bool bMustReplicate);
720
722 UE_DEPRECATED(5.1, "Please use NotifyDemoPlaybackError instead")
723 ENGINE_API void NotifyDemoPlaybackFailure(EDemoPlayFailure::Type FailureType);
725
726 void NotifyDemoPlaybackError(const UE::Net::TNetResult<EReplayResult>& Result);
727 ENGINE_API void NotifyDemoRecordFailure(const UE::Net::TNetResult<EReplayResult>& Result);
728
729 TArray<FQueuedDemoPacket> QueuedPacketsBeforeTravel;
730
731 int64 MaxArchiveReadPos;
732
733private:
734
735 // Max percent of time to spend building consider lists / prioritizing actors
736 // for demo recording. Only used if MaxDesiredRecordTimeMS > 0.
737 float RecordBuildConsiderAndPrioritizeTimeSlice;
738
739 // Max percent of time to spend replicating prioritized destruction infos. Only used if MaxDesiredRecordTimeMS > 0.
740 float RecordDestructionInfoReplicationTimeSlice;
741
742 ENGINE_API void AdjustConsiderTime(const float ReplicatedPercent);
743
744 ENGINE_API bool ProcessFastForwardPackets(TArrayView<FPlaybackPacket> Packets, const TSet<int32>& LevelIndices);
745 ENGINE_API void ProcessPlaybackPackets(TArrayView<FPlaybackPacket> Packets);
746
747 virtual ECreateReplicationChangelistMgrFlags GetCreateReplicationChangelistMgrFlags() const override
748 {
750 }
751
753
755// Replay frame fidelity
756public:
757 // Simplified rating of replay frame fidelity as percentage of actors that were replicated.
758 // [0..1] where 0 means nothing was recorded this frame and 1 means full fidelity.
759 // This treats all actors equally. Assuming more important actors are prioritized higher, in general actual "fidelity"
760 // is expected to be higher than reported, which should be fine for detecting low-fidelity frame/intervals in replay file.
762 {
763 return LastReplayFrameFidelity;
764 }
765
766private:
767 TAtomic<float> LastReplayFrameFidelity{ 0 };
768
769 FReplayHelper ReplayHelper;
770
772 bool bSkipStartupActorRollback = false;
773
774 friend class UDemoNetConnection;
775 friend class FQueuedReplayTask;
776};
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
EChannelCloseReason
Definition CoreNetTypes.h:49
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
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(DelegateName)
Definition DelegateCombinations.h:23
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
TArray< struct FDemoSavedRepObjectState > FDemoSavedPropertyState
Definition DemoNetDriver.h:132
ENetDormancy
Definition EngineTypes.h:3361
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
ECreateReplicationChangelistMgrFlags
Definition RepLayout.h:1047
EReplayResult
Definition ReplayResult.h:10
EWriteDemoFrameFlags
Definition ReplayTypes.h:43
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition PlayerController.h:261
Definition Engine.Build.cs:7
Definition Archive.h:1208
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition NetworkGuid.h:12
Definition NetworkDelegates.h:56
Definition UObjectGlobals.h:1292
Definition DemoNetDriver.cpp:370
static bool FastForwardLevels(UDemoNetDriver *DemoNetDriver, const FGotoResult &GotoResult)
Definition DemoNetDriver.cpp:379
Definition DemoNetDriver.h:47
virtual bool ShouldPausePlayback() const
Definition DemoNetDriver.h:60
virtual FName GetName() const =0
virtual bool Tick()=0
virtual ~FQueuedReplayTask()
Definition DemoNetDriver.h:53
FQueuedReplayTask(UDemoNetDriver *InDriver)
Definition DemoNetDriver.h:49
virtual void StartTask()=0
TWeakObjectPtr< UDemoNetDriver > Driver
Definition DemoNetDriver.h:62
Definition DemoNetDriver.cpp:1705
Definition RepLayout.h:672
Definition ReplayHelper.h:33
Definition ObjectMacros.h:180
Definition SocketSubsystem.h:58
Definition ArrayView.h:139
Definition Array.h:670
Definition Atomic.h:538
Definition IndirectArray.h:20
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition UniquePtr.h:107
Definition ActorChannel.h:78
Definition ActorComponent.h:152
Definition Channel.h:63
Definition DemoNetConnection.h:20
Definition DemoNetDriver.h:154
bool HasGameSpecificFrameData() const
Definition DemoNetDriver.h:619
bool ProcessPacket(const FPlaybackPacket &PlaybackPacket)
Definition DemoNetDriver.h:454
virtual bool DoesSupportEncryption() const override
Definition DemoNetDriver.h:370
FReplayCustomVersion::Type GetPlaybackReplayVersion() const
Definition DemoNetDriver.h:643
uint32 GetPlaybackCustomVersionVersion(const FGuid &VersionGuid) const
Definition DemoNetDriver.h:648
int32 RecordCountSinceFlush
Definition DemoNetDriver.h:195
bool HasDeltaCheckpoints() const
Definition DemoNetDriver.h:613
uint32 GetPlaybackGameNetworkProtocolVersion() const
Definition DemoNetDriver.h:646
void SetMaxDesiredRecordTimeMS(const float InMaxDesiredRecordTimeMS)
Definition DemoNetDriver.h:409
void SetLastCheckpointTime(double CheckpointTime)
Definition DemoNetDriver.h:208
virtual class ISocketSubsystem * GetSocketSubsystem() override
Definition DemoNetDriver.h:368
float GetLastReplayFrameFidelity() const
Definition DemoNetDriver.h:761
TArray< FPlaybackPacket > PlaybackPackets
Definition DemoNetDriver.h:242
APlayerController * GetSpectatorController() const
Definition DemoNetDriver.h:176
void SetCurrentLevelIndex(int32 Index)
Definition DemoNetDriver.h:171
virtual void ProcessLocalClientPackets() override
Definition DemoNetDriver.h:361
virtual bool IsNetResourceValid(void) override
Definition DemoNetDriver.h:441
bool IsActorPrioritizationEnabled() const
Definition DemoNetDriver.h:419
int32 GetDemoFrameNum() const
Definition DemoNetDriver.h:165
bool GetChannelsArePaused() const
Definition DemoNetDriver.h:167
void SetViewerOverride(APlayerController *const InViewerOverride)
Definition DemoNetDriver.h:414
virtual void LowLevelSend(TSharedPtr< const FInternetAddr > Address, void *Data, int32 CountBits, FOutPacketTraits &Traits) override
Definition DemoNetDriver.h:367
const FString & GetDemoSessionID() const
Definition DemoNetDriver.h:601
uint32 GetPlaybackEngineNetworkProtocolVersion() const
Definition DemoNetDriver.h:645
bool HasLevelStreamingFixes() const
Definition DemoNetDriver.h:607
bool IsLoadingCheckpoint() const
Definition DemoNetDriver.h:237
double GetLastCheckpointTime() const
Definition DemoNetDriver.h:206
TOptional< UE::Net::TNetResult< EReplayResult > > PendingRecordFailure
Definition DemoNetDriver.h:271
uint8 bIsWaitingForStream
Definition DemoNetDriver.h:269
void SetCheckpointSaveMaxMSPerFrame(const float InCheckpointSaveMaxMSPerFrame)
Definition DemoNetDriver.h:422
bool IsRecordingMapChanges() const
Definition DemoNetDriver.h:244
float GetDemoCurrentTime() const
Definition DemoNetDriver.h:399
uint32 GetPlaybackDemoChangelist() const
Definition DemoNetDriver.h:633
bool IsFinalizingFastForward() const
Definition DemoNetDriver.h:552
uint8 bIsWaitingForHeaderDownload
Definition DemoNetDriver.h:268
double MaxRecordTime
Definition DemoNetDriver.h:194
TSharedPtr< class INetworkReplayStreamer > GetReplayStreamer() const
Definition DemoNetDriver.h:187
float GetDemoTotalTime() const
Definition DemoNetDriver.h:391
bool IsFastForwarding() const
Definition DemoNetDriver.h:551
double LastRecordAvgFlush
Definition DemoNetDriver.h:193
bool IsRestoringStartupActors() const
Definition DemoNetDriver.h:553
void SetDemoCurrentTime(float CurrentTime)
Definition DemoNetDriver.h:401
double GetCurrentLevelIndex() const
Definition DemoNetDriver.h:169
void SetActorPrioritizationEnabled(const bool bInPrioritizeActors)
Definition DemoNetDriver.h:417
void SetDemoTotalTime(float TotalTime)
Definition DemoNetDriver.h:393
uint32 GetDemoCurrentTimeInMS() const
Definition DemoNetDriver.h:189
virtual bool IsAvailable() const override
Definition DemoNetDriver.h:335
FString GetDemoURL() const
Definition DemoNetDriver.h:406
void SetPlayingPlaylist(TSharedPtr< struct FReplayPlaylistTracker > InPlaylistTracker)
Definition DemoNetDriver.h:228
const FString & GetActiveReplayName() const
Definition DemoNetDriver.h:628
ENGINE_API const TArray< FLevelNameAndTime > & GetLevelNameAndTimeList()
double AccumulatedRecordTime
Definition DemoNetDriver.h:192
float GetMaxDesiredRecordTimeMS() const
Definition DemoNetDriver.h:411
bool ReadDemoFrameIntoPlaybackPackets(FArchive &Ar)
Definition DemoNetDriver.h:560
Definition Class.h:2476
Definition Level.h:423
Definition LocalPlayer.h:169
Definition NetConnection.h:284
Definition NetDriver.h:799
Definition Object.h:95
Definition World.h:918
Definition EngineBaseTypes.h:739
Definition ByteSwap.h:14
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition NetDriver.h:700
Definition DemoNetDriver.h:111
TSharedPtr< const FRepLayout > RepLayout
Definition DemoNetDriver.h:120
ENGINE_API ~FDemoSavedRepObjectState()
Definition DemoNetDriver.cpp:4727
FRepStateStaticBuffer PropertyData
Definition DemoNetDriver.h:121
void CountBytes(FArchive &Ar) const
Definition DemoNetDriver.h:123
TWeakObjectPtr< const UObject > Object
Definition DemoNetDriver.h:119
Definition NetworkReplayStreaming.h:408
CORE_API static const FGuid Guid
Definition EngineNetworkCustomVersion.h:106
Definition Stack.h:114
CORE_API static const FGuid Guid
Definition EngineNetworkCustomVersion.h:124
Definition NetworkReplayStreaming.h:268
Definition Guid.h:109
Definition DemoNetDriver.h:136
Definition PacketTraits.h:21
Definition Stack.h:103
Definition ReplayTypes.h:51
Definition ReplayTypes.h:257
Definition RepLayout.h:377
void CountBytes(FArchive &Ar) const
Definition RepLayout.cpp:1049
Type
Definition ReplayTypes.h:126
Definition DemoNetDriver.h:68
Definition NetworkReplayStreaming.h:228
Definition EngineBaseTypes.h:799
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition WeakObjectPtrTemplates.h:25