WebCFace 3.1.1
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
func_result.h
Go to the documentation of this file.
1#pragma once
4#include <chrono>
5#ifdef WEBCFACE_MESON
6#include "webcface-config.h"
7#else
8#include "webcface/common/webcface-config.h"
9#endif
10#include <optional>
11#include <memory>
12#include <functional>
13#include "field.h"
16
18namespace internal {
19struct PromiseData;
20struct FuncInfo;
21struct ClientData;
22} // namespace internal
23
31 std::shared_ptr<internal::PromiseData> data;
32
33 static SanityError WEBCFACE_CALL invalidPromise();
34
35 public:
36 Promise(const Field &base,
37 const std::shared_ptr<internal::PromiseData> &data);
38
39 using Field::member;
40 using Field::name;
41 using Field::nameW;
42
43 private:
44 void waitReachImpl(std::optional<std::chrono::microseconds> timeout) const;
45 void waitFinishImpl(std::optional<std::chrono::microseconds> timeout) const;
46
47 public:
53 bool reached() const;
65 bool found() const;
81 waitReachImpl(std::nullopt);
82 return *this;
83 }
92 Promise &waitReachFor(std::chrono::microseconds timeout) {
93 waitReachImpl(timeout);
94 return *this;
95 }
104 template <typename Clock, typename Duration>
105 Promise &waitReachUntil(std::chrono::time_point<Clock, Duration> timeout) {
106 waitReachImpl(std::chrono::duration_cast<std::chrono::microseconds>(
107 timeout - Clock::now()));
108 return *this;
109 }
110
119 bool finished() const;
130 bool isError() const;
137 ValAdaptorVector response() const;
145 StringView rejection() const;
154 WStringView rejectionW() const;
155
171 waitFinishImpl(std::nullopt);
172 return *this;
173 }
182 Promise &waitFinishFor(std::chrono::microseconds timeout) {
183 waitFinishImpl(timeout);
184 return *this;
185 }
194 template <typename Clock, typename Duration>
195 Promise &waitFinishUntil(std::chrono::time_point<Clock, Duration> timeout) {
196 waitFinishImpl(std::chrono::duration_cast<std::chrono::microseconds>(
197 timeout - Clock::now()));
198 return *this;
199 }
200
214 Promise &onReach(std::function<void WEBCFACE_CALL_FP(Promise)> callback);
227 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
228 std::nullptr_t> = nullptr>
229 Promise &onReach(F callback) {
230 return onReach(
231 [callback = std::move(callback)](const Promise &) { callback(); });
232 }
245 Promise &onFinish(std::function<void WEBCFACE_CALL_FP(Promise)> callback);
258 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
259 std::nullptr_t> = nullptr>
260 Promise &onFinish(F callback) {
261 return onFinish(
262 [callback = std::move(callback)](const Promise &) { callback(); });
263 }
264};
265
267
276 std::shared_ptr<internal::PromiseData> data;
277
278 static SanityError WEBCFACE_CALL invalidHandle();
279
280 public:
281 CallHandle() = default;
282 CallHandle(const Field &base,
283 const std::shared_ptr<internal::PromiseData> &data);
284
285 friend class Func;
286 friend class FuncListener;
287 friend struct internal::FuncInfo;
288 friend struct internal::ClientData;
289
290 using Field::name;
291 using Field::nameW;
292
299 const std::vector<ValAdaptorVector> &args() const;
304 const wcfMultiVal *cArgs() const;
309 const wcfMultiValW *cWArgs() const;
310
314 void respond(const ValAdaptorVector &value) const;
318 void reject(const ValAdaptor &message) const;
322 void reach(bool found) const;
323
334 bool assertArgsNum(std::size_t expected) const;
335
344 template <typename T>
345 void respond(const T &value) const {
346 respond(ValAdaptorVector(value));
347 }
351 void respond(StringInitializer value) const {
352 respond(ValAdaptorVector(std::move(value)));
353 }
362 void respond() const { respond(ValAdaptorVector()); }
363
373 void reject(StringInitializer message) const {
374 reject(ValAdaptor(std::move(message)));
375 }
376
384 bool respondable() const;
385};
387
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:275
void respond(const T &value) const
関数の結果を送信する
Definition func_result.h:345
void reject(StringInitializer message) const
関数の結果を例外として送信する
Definition func_result.h:373
void respond() const
空の値を関数の結果として送信する
Definition func_result.h:362
void respond(StringInitializer value) const
Definition func_result.h:351
Definition func.h:573
関数1つを表すクラス
Definition func.h:109
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:30
Promise & waitFinishFor(std::chrono::microseconds timeout)
関数の実行が完了するまで待機
Definition func_result.h:182
Promise & onReach(F callback)
リモートに呼び出しメッセージが到達したときに呼び出すコールバックを設定
Definition func_result.h:229
Promise & waitReach()
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:80
Promise & waitFinishUntil(std::chrono::time_point< Clock, Duration > timeout)
関数の実行が完了するまで待機
Definition func_result.h:195
Promise & waitFinish()
関数の実行が完了するまで待機
Definition func_result.h:170
Promise & waitReachUntil(std::chrono::time_point< Clock, Duration > timeout)
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:105
Promise & onFinish(F callback)
関数の実行が完了した時呼び出すコールバックを設定
Definition func_result.h:260
Promise & waitReachFor(std::chrono::microseconds timeout)
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:92
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:235
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:71
ValAdaptorのVector.
Definition val_adaptor_vec.h:17
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:81
数値と文字列をまとめて扱うためのstruct (wstring)
Definition def_types.h:84
数値と文字列をまとめて扱うためのstruct
Definition def_types.h:50
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:68
未初期化の変数にアクセスした場合に発生する例外
Definition exception.h:47
Definition client_internal.h:46
関数1つの情報を表す。関数の実体も持つ
Definition func_internal.h:136
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_CALL
Definition webcface-config.h:106
#define WEBCFACE_NS_END
Definition webcface-config.h:113
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:112
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107