2#include <condition_variable>
3#include <unordered_map>
19struct PromiseData :
public std::enable_shared_from_this<PromiseData> {
25 std::condition_variable
cond;
29 bool reach_event_done =
false;
30 bool finish_event_done =
false;
34 bool finished =
false;
35 bool is_error =
false;
41 const std::vector<ValAdaptorVector>
args_;
42 std::variant<int, std::vector<wcfMultiVal>, std::vector<wcfMultiValW>>
48 void callReachEvent();
52 void callFinishEvent();
58 std::size_t caller_id = 0)
59 : reach_event(), finish_event(), base(base),
60 caller_id(caller_id), args_(std::move(args)) {}
66 template <std::
size_t v_index,
typename CVal>
67 std::vector<CVal> &initCArgs();
72 std::size_t
callerId()
const {
return caller_id; }
84 std::unordered_map<std::size_t, std::shared_ptr<PromiseData>> promises;
85 std::size_t next_caller_id = 0;
93 std::lock_guard lock(mtx);
94 std::size_t caller_id = next_caller_id++;
95 auto state = std::make_shared<PromiseData>(
96 base, std::vector<ValAdaptorVector>{}, caller_id);
97 promises.emplace(caller_id, state);
104 std::shared_ptr<PromiseData>
getResult(std::size_t caller_id) {
105 std::lock_guard lock(mtx);
106 auto it = promises.find(caller_id);
107 if (it != promises.end()) {
118 std::lock_guard lock(mtx);
119 auto it = promises.find(caller_id);
120 if (it != promises.end()) {
138 std::optional<std::vector<Arg>>
args;
165 std::optional<std::vector<Arg>> &&args,
166 std::function<Func::FuncType> &&func_impl);
呼び出された関数の引数の取得と戻り値のセットをするインタフェース
Definition func_result.h:275
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:30
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:170
ValAdaptorのVector.
Definition val_adaptor_vec.h:17
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:81
PromiseDataのリストを保持する。
Definition func_internal.h:82
std::shared_ptr< PromiseData > addResult(const Field &base)
新しいcaller_idを振って新しいAsyncFuncStateを生成しそれを返す
Definition func_internal.h:92
std::shared_ptr< PromiseData > getResult(std::size_t caller_id)
AsyncFuncStateを取得
Definition func_internal.h:104
void removeResult(std::size_t caller_id)
resultを設定し終わったstateを削除
Definition func_internal.h:117
ValType
引数や戻り値の型を表すenum
Definition val_adaptor.h:21
ClientDataの参照とメンバ名とデータ名を持つクラス
Definition field.h:68
Funcの実行結果の処理中に発生した例外
Definition exception.h:71
未初期化の変数にアクセスした場合に発生する例外
Definition exception.h:47
関数1つの情報を表す。関数の実体も持つ
Definition func_internal.h:136
std::function< Func::FuncType > func_impl
Definition func_internal.h:139
std::optional< std::vector< Arg > > args
Definition func_internal.h:138
ValType return_type
Definition func_internal.h:137
int index
Definition func_internal.h:140
void run(const CallHandle &handle)
func_implをこのスレッドで実行
Definition func_internal.h:148
PromiseとCallHandleのデータを保持するクラス
Definition func_internal.h:19
std::condition_variable cond
Definition func_internal.h:25
std::size_t callerId() const
Definition func_internal.h:72
std::size_t caller_id
Definition func_internal.h:40
std::function< void(Promise)> reach_event
Definition func_internal.h:27
Field base
Definition func_internal.h:39
ValAdaptor rejection
Definition func_internal.h:37
std::function< void(Promise)> finish_event
Definition func_internal.h:28
ValAdaptorVector response
Definition func_internal.h:36
std::mutex m
Definition func_internal.h:24
std::variant< int, std::vector< wcfMultiVal >, std::vector< wcfMultiValW > > c_args_
Definition func_internal.h:43
const std::vector< ValAdaptorVector > args_
Definition func_internal.h:41
PromiseData(const Field &base, std::vector< ValAdaptorVector > &&args, std::size_t caller_id=0)
Definition func_internal.h:57
関数呼び出し (client(caller)->server->client(receiver))
Definition func.h:23
#define WEBCFACE_NS_END
Definition webcface-config.h:113
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:112