WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
func_result.h
Go to the documentation of this file.
1#pragma once
3#ifdef WEBCFACE_MESON
4#include "webcface-config.h"
5#else
6#include "webcface/common/webcface-config.h"
7#endif
8#include <optional>
9#include <future>
10#include <memory>
11#include <stdexcept>
12#include "field.h"
15
17namespace internal {
18struct PromiseData;
19struct FuncInfo;
20struct ClientData;
21} // namespace internal
22
23#ifdef _MSC_VER
24#pragma warning(push)
25#pragma warning(disable : 4996)
26#else
27#pragma GCC diagnostic push
28#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
29#endif
30
38 std::shared_ptr<internal::PromiseData> data;
39
40 static SanityError WEBCFACE_CALL invalidPromise();
41
42 public:
43 Promise(const Field &base,
44 const std::shared_ptr<internal::PromiseData> &data,
45 const std::shared_future<bool> &started,
46 const std::shared_future<ValAdaptor> &result);
47
48 using Field::member;
49 using Field::name;
50 using Field::nameW;
51
62 [[deprecated(
63 "use reached(), found() or waitReach()")]] std::shared_future<bool>
76 [[deprecated(
77 "use finished(), response(), rejection(), or waitFinish()")]] std::
78 shared_future<ValAdaptor>
80
81 private:
82 void waitReachImpl(std::optional<std::chrono::microseconds> timeout) const;
83 void waitFinishImpl(std::optional<std::chrono::microseconds> timeout) const;
84
85 public:
91 bool reached() const;
103 bool found() const;
119 waitReachImpl(std::nullopt);
120 return *this;
121 }
130 Promise &waitReachFor(std::chrono::microseconds timeout) {
131 waitReachImpl(timeout);
132 return *this;
133 }
142 template <typename Clock, typename Duration>
143 Promise &waitReachUntil(std::chrono::time_point<Clock, Duration> timeout) {
144 waitReachImpl(std::chrono::duration_cast<std::chrono::microseconds>(
145 timeout - Clock::now()));
146 return *this;
147 }
148
157 bool finished() const;
168 bool isError() const;
174 ValAdaptor response() const;
182 StringView rejection() const;
191 WStringView rejectionW() const;
192
208 waitFinishImpl(std::nullopt);
209 return *this;
210 }
219 Promise &waitFinishFor(std::chrono::microseconds timeout) {
220 waitFinishImpl(timeout);
221 return *this;
222 }
231 template <typename Clock, typename Duration>
232 Promise &waitFinishUntil(std::chrono::time_point<Clock, Duration> timeout) {
233 waitFinishImpl(std::chrono::duration_cast<std::chrono::microseconds>(
234 timeout - Clock::now()));
235 return *this;
236 }
237
251 Promise &onReach(std::function<void WEBCFACE_CALL_FP(Promise)> callback);
264 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
265 std::nullptr_t> = nullptr>
266 Promise &onReach(F callback) {
267 return onReach(
268 [callback = std::move(callback)](const Promise &) { callback(); });
269 }
282 Promise &onFinish(std::function<void WEBCFACE_CALL_FP(Promise)> callback);
295 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
296 std::nullptr_t> = nullptr>
297 Promise &onFinish(F callback) {
298 return onFinish(
299 [callback = std::move(callback)](const Promise &) { callback(); });
300 }
301};
302
303#ifdef _MSC_VER
304#pragma warning(pop)
305#else
306#pragma GCC diagnostic pop
307#endif
308
310
319 std::shared_ptr<internal::PromiseData> data;
320
321 static SanityError WEBCFACE_CALL invalidHandle();
322
323 public:
324 CallHandle() = default;
325 CallHandle(const Field &base,
326 const std::shared_ptr<internal::PromiseData> &data);
327
328 friend class Func;
329 friend class FuncListener;
330 friend struct internal::FuncInfo;
331 friend struct internal::ClientData;
332
333 using Field::name;
334 using Field::nameW;
335
340 const std::vector<ValAdaptor> &args() const;
345 const wcfMultiVal *cArgs() const;
350 const wcfMultiValW *cWArgs() const;
351
355 void respond(const ValAdaptor &value) const;
359 void reject(const ValAdaptor &message) const;
363 void reach(bool found) const;
364
375 bool assertArgsNum(std::size_t expected) const;
376
385 template <typename T>
386 void respond(const T &value) const {
387 respond(ValAdaptor(value));
388 }
392 template <std::size_t N>
393 void respond(const char (&value)[N]) const {
394 respond(ValAdaptor(value));
395 }
399 template <std::size_t N>
400 void respond(const wchar_t (&value)[N]) const {
401 respond(ValAdaptor(value));
402 }
411 void respond() const { respond(ValAdaptor()); }
412
422 void reject(StringInitializer message) const {
423 reject(ValAdaptor(std::move(message)));
424 }
425
433 bool respondable() const;
434};
436
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:318
void respond(const T &value) const
関数の結果を送信する
Definition func_result.h:386
void respond(const wchar_t(&value)[N]) const
Definition func_result.h:400
void respond(const char(&value)[N]) const
Definition func_result.h:393
void reject(StringInitializer message) const
関数の結果を例外として送信する
Definition func_result.h:422
void respond() const
空の値を関数の結果として送信する
Definition func_result.h:411
Definition func.h:616
関数1つを表すクラス
Definition func.h:106
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:37
Promise & waitFinishFor(std::chrono::microseconds timeout)
関数の実行が完了するまで待機
Definition func_result.h:219
Promise & onReach(F callback)
リモートに呼び出しメッセージが到達したときに呼び出すコールバックを設定
Definition func_result.h:266
Promise & waitReach()
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:118
std::shared_future< ValAdaptor > result
関数の実行が完了した時戻り値が入る
Definition func_result.h:79
Promise & waitFinishUntil(std::chrono::time_point< Clock, Duration > timeout)
関数の実行が完了するまで待機
Definition func_result.h:232
std::shared_future< bool > started
リモートに呼び出しメッセージが到達したときに値が入る
Definition func_result.h:64
Promise & waitFinish()
関数の実行が完了するまで待機
Definition func_result.h:207
Promise & waitReachUntil(std::chrono::time_point< Clock, Duration > timeout)
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:143
Promise & onFinish(F callback)
関数の実行が完了した時呼び出すコールバックを設定
Definition func_result.h:297
Promise & waitReachFor(std::chrono::microseconds timeout)
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:130
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:215
webcfaceで管理されている文字列を参照するstring_view
Definition encoding.h:60
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:87
数値と文字列をまとめて扱うためのstruct (wstring)
Definition def_types.h:84
数値と文字列をまとめて扱うためのstruct
Definition def_types.h:50
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:71
未初期化の変数にアクセスした場合に発生する例外
Definition exception.h:46
Definition client_internal.h:46
関数1つの情報を表す。関数の実体も持つ
Definition func_internal.h:142
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_CALL
Definition webcface-config.h:106
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107