UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IMessageRpcClient.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"
6#include "MessageEndpoint.h"
7#include "Misc/Guid.h"
8#include "IMessageContext.h"
9#include "IMessageRpcCall.h"
11#include "Async/IAsyncTask.h"
12#include "Async/Future.h"
13#include "Async/AsyncResult.h"
14
19{
21 class FCall
22 : public IAsyncProgress
23 , public IAsyncTask
24 , public IMessageRpcCall
25 {
26 public:
27
28 FCall()
30 , TimeCreated(FDateTime::UtcNow())
31 { }
32
33 public:
34
35 FSimpleDelegate& OnCancelled()
36 {
37 return CanceledDelegate;
38 }
39
40 public:
41
42 virtual TOptional<float> GetCompletion() override
43 {
44 return Completion;
45 }
46
47 virtual FText GetStatusText() override
48 {
49 return StatusText;
50 }
51
52 virtual FSimpleDelegate& OnProgressChanged() override
53 {
54 return ProgressChangedDelegate;
55 }
56
57 public:
58
59 virtual void Cancel() override
60 {
62 CanceledDelegate.ExecuteIfBound();
63 }
64
65 virtual EAsyncTaskState GetTaskState() override
66 {
67 return State;
68 }
69
70 public:
71
72 virtual FDateTime GetLastUpdated() const override
73 {
74 return LastUpdated;
75 }
76
77 virtual FDateTime GetTimeCreated() const override
78 {
79 return TimeCreated;
80 }
81
82 virtual void UpdateProgress(float InCompletion, const FText& InStatusText) override
83 {
84 Completion = InCompletion;
85 StatusText = InStatusText;
86 LastUpdated = FDateTime::UtcNow();
87
88 ProgressChangedDelegate.ExecuteIfBound();
89 }
90
91 protected:
92
93 float Completion;
94 FDateTime LastUpdated;
95 EAsyncTaskState State;
96 FText StatusText;
97 FDateTime TimeCreated;
98
99 private:
100
101 FSimpleDelegate CanceledDelegate;
102 FSimpleDelegate ProgressChangedDelegate;
103 };
104
105
107 template<typename RpcType, typename... P>
108 class TCall
109 : public FCall
110 {
111 public:
112
113 TCall(const FGuid& CallId, P... Params)
114 : MessageTemplate(new typename RpcType::FRequest(Params...))
115 {
116 MessageTemplate->CallId = CallId;
117 }
118
119 virtual ~TCall()
120 {
121 delete MessageTemplate;
122 }
123
125 {
126 if (ResponseContext->GetMessageTypeInfo() == RpcType::FResponse::StaticStruct())
127 {
129 Promise.SetValue(static_cast<const typename RpcType::FResponse*>(ResponseContext->GetMessage())->Result);
130 }
131 else
132 {
134 Promise.SetValue(typename RpcType::FResult());
135 }
136 }
137
138 virtual void* ConstructMessage() const override
139 {
140 return FMessageEndpoint::MakeMessage<typename RpcType::FRequest>(*MessageTemplate);
141 }
142
144 {
145 return Promise.GetFuture();
146 }
147
148 virtual const FGuid& GetId() const override
149 {
150 return MessageTemplate->CallId;
151 }
152
153 virtual void* GetMessageTemplate() const override
154 {
155 return MessageTemplate;
156 }
157
158 virtual UScriptStruct* GetMessageType() const override
159 {
160 return RpcType::FRequest::StaticStruct();
161 }
162
163 virtual void TimeOut() override
164 {
166 Promise.SetValue(typename RpcType::FResult());
167 }
168
169 private:
170
172 typename RpcType::FRequest* MessageTemplate;
173 };
174
175public:
176
183 virtual void Connect(const FMessageAddress& InServerAddress) = 0;
184
190 virtual void Disconnect() = 0;
191
197 virtual bool IsConnected() const = 0;
198
199public:
200
208 template<typename RpcType, typename... P>
210 {
211 typedef TCall<RpcType, P...> CallType;
212
213 FGuid CallId = FGuid::NewGuid();
214 TSharedRef<CallType> Call = MakeShareable(new CallType(CallId, Params...));
215 {
216 AddCall(Call);
217
218 Call->OnCancelled().BindLambda([this, CallId]() {
219 CancelCall(CallId);
220 });
221 }
222
224 }
225
226protected:
227
233 virtual void AddCall(const TSharedRef<IMessageRpcCall>& Call) = 0;
234
240 virtual void CancelCall(const FGuid& CallId) = 0;
241
242public:
243
245 virtual ~IMessageRpcClient() { }
246};
247
248
SharedPointerInternals::TRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject)
Definition SharedPointer.h:1947
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EAsyncTaskState
Definition IAsyncTask.h:11
#define Expose_TNameOf(type)
Definition UnrealTypeTraits.h:199
Definition Text.h:385
Definition IAsyncProgress.h:13
Definition IAsyncTask.h:37
Definition IMessageRpcCall.h:24
Definition IMessageRpcClient.h:19
virtual void Connect(const FMessageAddress &InServerAddress)=0
TAsyncResult< typename RpcType::FResult > Call(P... Params)
Definition IMessageRpcClient.h:209
virtual void Disconnect()=0
virtual void CancelCall(const FGuid &CallId)=0
virtual bool IsConnected() const =0
virtual ~IMessageRpcClient()
Definition IMessageRpcClient.h:245
virtual void AddCall(const TSharedRef< IMessageRpcCall > &Call)=0
Definition AsyncResult.h:18
const TFuture< ResultType > & GetFuture() const
Definition AsyncResult.h:85
Definition Future.h:393
Definition Future.h:541
Definition SharedPointer.h:153
Definition Class.h:1720
Definition DateTime.h:76
static CORE_API FDateTime UtcNow()
Definition DateTime.cpp:980
Definition Guid.h:109
static CORE_API FGuid NewGuid()
Definition Guid.cpp:236
Definition IMessageContext.h:26
Definition Optional.h:131