UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DirectLinkScenePipe.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
8
9#include "CoreTypes.h"
10#include "IMessageContext.h"
11
13struct FMessageAddress;
14
15namespace DirectLink
16{
17class FEndpoint;
18
19
39
40
41
46 : public FPipeBase
47 , public IDeltaConsumer
48{
49public:
56
57public: // IDeltaConsumer API
58 virtual void SetDeltaProducer(IDeltaProducer* Producer) override {}
59 virtual void SetupScene(FSetupSceneArg& SetupSceneArg) override;
60 virtual void OpenDelta(FOpenDeltaArg& OpenDeltaArg) override;
61 virtual void OnSetElement(FSetElementArg& SetElementArg) override;
62 virtual void RemoveElements(FRemoveElementsArg& RemoveElementsArg) override;
63 virtual void OnCloseDelta(FCloseDeltaArg& CloseDeltaArg) override;
64
65public:
66 int32 GetSentDeltaMessageCount() const { return NextMessageNumber; }
67
68private:
69 void Send(FDirectLinkMsg_DeltaMessage* Message);
70 void InitSetElementBuffer();
71 void SendSetElementBuffer();
72
73private:
74 // message ordering
75 int8 BatchNumber = 0;
76 int32 NextMessageNumber;
77 TArray<uint8> SetElementBuffer;
78};
79
80
82 : public FPipeBase
83 , public IDeltaProducer
85{
86public:
89 , Consumer(Consumer)
90 {
91 Consumer->SetDeltaProducer(this);
92 }
93
95
96 // delta producer
97 virtual void OnOpenHaveList(const FSceneIdentifier& HaveSceneId, bool bKeepPreviousContent, int32 SyncCycle) override;
98 virtual void OnHaveElement(FSceneGraphId NodeId, FElementHash HaveHash) override;
99 void SendHaveElements();
100 virtual void OnCloseHaveList() override;
101
102public: // IStreamCommunicationInterface API
103 virtual FCommunicationStatus GetCommunicationStatus() const override { return CurrentCommunicationStatus; }
104
105private:
106 // transmits messages to the actual delta consumer, reordered
107 void DelegateDeltaMessage(FDirectLinkMsg_DeltaMessage& Message);
109
110private:
111 // sent message ordering
112 int32 BatchNumber = 0;
113 int32 NextMessageNumber;
114 FDirectLinkMsg_HaveListMessage* BufferedHaveListContent = nullptr;
115 static constexpr int32 BufferSize = 100;
116
117 // received message ordering
119 int32 NextTransmitableMessageIndex = 0;
120 int32 CurrentBatchCode = 0;
121
123
124 // reporting
125 FCommunicationStatus CurrentCommunicationStatus;
126};
127
128
129FArchive& operator << (FArchive& Ar, FSceneIdentifier& SceneId);
130FArchive& operator << (FArchive& Ar, IDeltaConsumer::FSetupSceneArg& SetupSceneArg);
131FArchive& operator << (FArchive& Ar, IDeltaConsumer::FOpenDeltaArg& OpenDeltaArg);
132FArchive& operator << (FArchive& Ar, IDeltaConsumer::FCloseDeltaArg& CloseDeltaArg);
133
134} // namespace DirectLink
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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
Definition Archive.h:1208
Definition MessageEndpoint.h:70
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition DirectLinkMessages.h:172
Definition DirectLinkMessages.h:218
Definition IMessageContext.h:26