WebCFace 2.5.2
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
func_result.h
Go to the documentation of this file.
1#pragma once
2#ifdef WEBCFACE_MESON
3#include "webcface-config.h"
4#else
5#include "webcface/common/webcface-config.h"
6#endif
7#include <optional>
8#include <string>
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
32struct WEBCFACE_DLL FuncNotFound : public std::runtime_error {
33 explicit FuncNotFound(const FieldBase &base);
34};
35
36#ifdef _MSC_VER
37#pragma warning(push)
38#pragma warning(disable : 4996)
39#else
40#pragma GCC diagnostic push
41#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
42#endif
43
51 std::shared_ptr<internal::PromiseData> data;
52
53 static std::runtime_error &WEBCFACE_CALL invalidPromise();
54
55 public:
56 Promise(const Field &base,
57 const std::shared_ptr<internal::PromiseData> &data,
58 const std::shared_future<bool> &started,
59 const std::shared_future<ValAdaptor> &result);
60
61 using Field::member;
62 using Field::name;
63 using Field::nameW;
64
75 [[deprecated("use reached(), found() or waitReach()")]]
76 std::shared_future<bool> started;
88 [[deprecated("use finished(), response(), rejection(), or waitFinish()")]]
89 std::shared_future<ValAdaptor> result;
90
91 private:
92 void waitReachImpl(std::optional<std::chrono::microseconds> timeout) const;
93 void waitFinishImpl(std::optional<std::chrono::microseconds> timeout) const;
94
95 public:
101 bool reached() const;
113 bool found() const;
129 waitReachImpl(std::nullopt);
130 return *this;
131 }
140 Promise &waitReachFor(std::chrono::microseconds timeout) {
141 waitReachImpl(timeout);
142 return *this;
143 }
152 template <typename Clock, typename Duration>
153 Promise &waitReachUntil(std::chrono::time_point<Clock, Duration> timeout) {
154 waitReachImpl(std::chrono::duration_cast<std::chrono::microseconds>(
155 timeout - Clock::now()));
156 return *this;
157 }
158
167 bool finished() const;
178 bool isError() const;
184 ValAdaptor response() const;
190 const std::string &rejection() const;
196 const std::wstring &rejectionW() const;
197
213 waitFinishImpl(std::nullopt);
214 return *this;
215 }
224 Promise &waitFinishFor(std::chrono::microseconds timeout) {
225 waitFinishImpl(timeout);
226 return *this;
227 }
236 template <typename Clock, typename Duration>
237 Promise &waitFinishUntil(std::chrono::time_point<Clock, Duration> timeout) {
238 waitFinishImpl(std::chrono::duration_cast<std::chrono::microseconds>(
239 timeout - Clock::now()));
240 return *this;
241 }
242
256 Promise &onReach(std::function<void WEBCFACE_CALL_FP(Promise)> callback);
269 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
270 std::nullptr_t> = nullptr>
271 Promise &onReach(F callback) {
272 return onReach(
273 [callback = std::move(callback)](const Promise &) { callback(); });
274 }
287 Promise &onFinish(std::function<void WEBCFACE_CALL_FP(Promise)> callback);
300 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
301 std::nullptr_t> = nullptr>
302 Promise &onFinish(F callback) {
303 return onFinish(
304 [callback = std::move(callback)](const Promise &) { callback(); });
305 }
306};
307
308#ifdef _MSC_VER
309#pragma warning(pop)
310#else
311#pragma GCC diagnostic pop
312#endif
313
315
324 std::shared_ptr<internal::PromiseData> data;
325
326 static std::runtime_error &WEBCFACE_CALL invalidHandle();
327
328 public:
329 CallHandle() = default;
330 CallHandle(const Field &base,
331 const std::shared_ptr<internal::PromiseData> &data);
332
333 friend class Func;
334 friend class FuncListener;
335 friend struct internal::FuncInfo;
336 friend struct internal::ClientData;
337
338 using Field::name;
339 using Field::nameW;
340
345 const std::vector<ValAdaptor> &args() const;
350 const wcfMultiVal *cArgs() const;
355 const wcfMultiValW *cWArgs() const;
356
360 void respond(const ValAdaptor &value) const;
364 void reject(const ValAdaptor &message) const;
368 void reach(bool found) const;
369
380 bool assertArgsNum(std::size_t expected) const;
381
390 template <typename T>
391 void respond(const T &value) const {
392 respond(ValAdaptor(value));
393 }
402 void respond() const { respond(ValAdaptor::emptyVal()); }
403
412 void reject(std::string_view message) const { reject(ValAdaptor(message)); }
420 void reject(std::wstring_view message) const {
421 reject(ValAdaptor(message));
422 }
423
431 bool respondable() const;
432};
434
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:323
void respond(const T &value) const
関数の結果を送信する
Definition func_result.h:391
void reject(std::string_view message) const
関数の結果を例外として送信する
Definition func_result.h:412
void reject(std::wstring_view message) const
関数の結果を例外として送信する (wstring)
Definition func_result.h:420
void respond() const
空の値を関数の結果として送信する
Definition func_result.h:402
Definition func.h:590
関数1つを表すクラス
Definition func.h:95
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:50
std::shared_future< ValAdaptor > result
関数の実行が完了した時戻り値が入る
Definition func_result.h:89
Promise & waitFinishFor(std::chrono::microseconds timeout)
関数の実行が完了するまで待機
Definition func_result.h:224
Promise & onReach(F callback)
リモートに呼び出しメッセージが到達したときに呼び出すコールバックを設定
Definition func_result.h:271
Promise & waitReach()
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:128
Promise & waitFinishUntil(std::chrono::time_point< Clock, Duration > timeout)
関数の実行が完了するまで待機
Definition func_result.h:237
std::shared_future< bool > started
リモートに呼び出しメッセージが到達したときに値が入る
Definition func_result.h:76
Promise & waitFinish()
関数の実行が完了するまで待機
Definition func_result.h:212
Promise & waitReachUntil(std::chrono::time_point< Clock, Duration > timeout)
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:153
Promise & onFinish(F callback)
関数の実行が完了した時呼び出すコールバックを設定
Definition func_result.h:302
Promise & waitReachFor(std::chrono::microseconds timeout)
リモートに呼び出しメッセージが到達するまで待機
Definition func_result.h:140
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:87
数値と文字列をまとめて扱うためのstruct (wstring)
Definition def_types.h:84
数値と文字列をまとめて扱うためのstruct
Definition def_types.h:50
メンバ名とデータ名を持つクラス
Definition field.h:37
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:70
Funcの実行ができなかった場合発生する例外
Definition func_result.h:32
Definition client_internal.h:35
関数1つの情報を表す。関数の実体も持つ
Definition func_internal.h:142
#define WEBCFACE_DLL
Definition webcface-config.h:60
#define WEBCFACE_CALL
Definition webcface-config.h:97
#define WEBCFACE_NS_END
Definition webcface-config.h:104
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:103
#define WEBCFACE_CALL_FP
Definition webcface-config.h:98