WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
c_wcf_internal.h
Go to the documentation of this file.
1#pragma once
2#include <algorithm>
3#include <vector>
5#include "webcface/wcf.h"
6#include "webcface/client.h"
7#include "webcface/func.h"
10
12inline namespace c_wcf {
13template <typename CharT>
14inline std::basic_string_view<CharT> strOrEmpty(const CharT *p) {
15 if (p) {
16 return p;
17 } else {
18 return std::basic_string_view<CharT>();
19 }
20}
21
29 std::unordered_map<const wcfFuncCallHandle *, FuncCallHandle>>
32 std::unordered_map<const wcfFuncCallHandleW *, FuncCallHandle>>
34
44 std::unordered_map<const wcfMultiValW *, ValAdaptor>>
46
50inline internal::SafeGlobal<std::unordered_map<
51 const wcfViewComponent *, const std::vector<ViewComponent>>>
53inline internal::SafeGlobal<std::unordered_map<
54 const wcfViewComponentW *, const std::vector<ViewComponent>>>
56
57template <typename CharT>
58struct CharType {};
59template <>
60struct CharType<char> {
67 static constexpr auto &fetchedHandles() { return fetched_handles; }
68 static constexpr auto &funcValList() { return func_val_list; }
69 static constexpr auto &viewList() { return view_list; }
70};
71template <>
72struct CharType<wchar_t> {
79 static constexpr auto &fetchedHandles() { return fetched_handles_w; }
80 static constexpr auto &funcValList() { return func_val_list_w; }
81 static constexpr auto &viewList() { return view_list_w; }
82};
83
91
99
107inline Client *getWcli(wcfClient *wcli) {
108 if (!wcli_list) {
109 return nullptr;
110 }
111 if (std::find(wcli_list->begin(), wcli_list->end(), wcli) ==
112 wcli_list->end()) {
113 return nullptr;
114 }
115 return static_cast<Client *>(wcli);
116}
117
119 if (!func_result_list) {
120 return nullptr;
121 }
122 if (std::find(func_result_list->begin(), func_result_list->end(), res) ==
123 func_result_list->end()) {
124 return nullptr;
125 }
126 return static_cast<Promise *>(res);
127}
128
129template <typename MultiVal>
130ValAdaptor fromCVal(const MultiVal &val) {
131 if (val.as_str != nullptr) {
132 return ValAdaptor(val.as_str);
133 } else if (val.as_double != 0) {
134 return ValAdaptor(val.as_double);
135 } else {
136 return ValAdaptor(val.as_int);
137 }
138}
139template <typename CharT>
140std::vector<ValAdaptor> argsFromCVal(const typename CharType<CharT>::CVal *args,
141 int arg_size) {
142 std::vector<ValAdaptor> args_v;
143 args_v.reserve(arg_size);
144 for (int i = 0; i < arg_size; i++) {
145 args_v.emplace_back(fromCVal(args[i]));
146 }
147 return args_v;
148}
149
150template <typename CharT>
151auto resultToCVal(const ValAdaptor &result_val) {
152 auto result = new typename CharType<CharT>::CVal();
153 auto &list = CharType<CharT>::funcValList();
154 if(list){
155 list->emplace(result, result_val);
156 const ValAdaptor &result_val_ref =
157 list->at(result);
158 result->as_int = result_val_ref;
159 result->as_double = result_val_ref;
160 if constexpr (std::is_same_v<CharT, char>) {
161 result->as_str = result_val_ref.asStringView().c_str();
162 } else {
163 result->as_str = result_val_ref.asWStringView().c_str();
164 }
165 }
166 return result;
167}
168
169} // namespace c_wcf
171
172using namespace webcface;
サーバーに接続するクライアント。
Definition client.h:18
非同期で実行した関数の実行結果を取得するインタフェース。
Definition func_result.h:37
const CharT * c_str() const
null終端の文字列ポインタを返す
Definition encoding.h:76
数値、文字列などの値を相互変換するクラス
Definition val_adaptor.h:87
StringView asStringView() const
null終端の文字列を返す
Definition val_adaptor.cc:85
WStringView asWStringView() const
null終端の文字列を返す (wstring)
Definition val_adaptor.cc:89
Definition safe_global.h:13
void wcfClient
Definition def_types.h:14
void(* wcfEventCallback1W)(const wchar_t *member, void *user_data)
イベントに登録する、引数1つ(+voidポインタ)を取るコールバックの型 (wstring)
Definition def_types.h:171
void(* wcfEventCallback2)(const char *member, const char *field, void *user_data)
イベントに登録する、引数2つ(+voidポインタ)を取るコールバックの型
Definition def_types.h:177
void(* wcfFuncCallbackW)(wcfFuncCallHandleW *call_handle, void *user_data)
funcにsetするコールバックの型 (wstring)
Definition def_types.h:158
void(* wcfEventCallback2W)(const wchar_t *member, const wchar_t *field, void *user_data)
イベントに登録する、引数2つ(+voidポインタ)を取るコールバックの型 (wstring)
Definition def_types.h:185
void(* wcfFuncCallback)(wcfFuncCallHandle *call_handle, void *user_data)
funcにsetするコールバックの型
Definition def_types.h:152
void(* wcfEventCallback1)(const char *member, void *user_data)
イベントに登録する、引数1つ(+voidポインタ)を取るコールバックの型
Definition def_types.h:164
void wcfPromise
Definition def_types.h:15
Promise * getPromise(wcfPromise *res)
Definition c_wcf_internal.h:118
internal::SafeGlobal< std::unordered_map< const wcfViewComponent *, const std::vector< ViewComponent > > > view_list
wcfViewGetで取得されたwcfViewComponentとViewComponentBase
Definition c_wcf_internal.h:52
internal::SafeGlobal< std::vector< Promise * > > func_result_list
wcfFuncRunAsyncで取得されたwcfPromiseのリスト
Definition c_wcf_internal.h:98
std::basic_string_view< CharT > strOrEmpty(const CharT *p)
Definition c_wcf_internal.h:14
internal::SafeGlobal< std::unordered_map< const wcfMultiValW *, ValAdaptor > > func_val_list_w
Definition c_wcf_internal.h:45
std::vector< ValAdaptor > argsFromCVal(const typename CharType< CharT >::CVal *args, int arg_size)
Definition c_wcf_internal.h:140
ValAdaptor fromCVal(const MultiVal &val)
Definition c_wcf_internal.h:130
internal::SafeGlobal< std::unordered_map< const wcfFuncCallHandleW *, FuncCallHandle > > fetched_handles_w
Definition c_wcf_internal.h:33
internal::SafeGlobal< std::vector< wcfClient * > > wcli_list
wcfInitで作られたクライアントのリスト
Definition c_wcf_internal.h:90
internal::SafeGlobal< std::unordered_map< const wcfViewComponentW *, const std::vector< ViewComponent > > > view_list_w
Definition c_wcf_internal.h:55
Client * getWcli(wcfClient *wcli)
voidポインタからclientオブジェクトを復元
Definition c_wcf_internal.h:107
internal::SafeGlobal< std::unordered_map< const wcfFuncCallHandle *, FuncCallHandle > > fetched_handles
wcfFuncFetchCallで取得されたwcfFuncCallHandleのリスト
Definition c_wcf_internal.h:30
internal::SafeGlobal< std::unordered_map< const wcfMultiVal *, ValAdaptor > > func_val_list
wcfFuncRun, wcfFuncGetResultで取得されたwcfMultiValとValAdaptorのリスト
Definition c_wcf_internal.h:42
auto resultToCVal(const ValAdaptor &result_val)
Definition c_wcf_internal.h:151
Definition arg.h:14
受信した関数呼び出しの情報を保持するstruct (wstring)
Definition def_types.h:131
受信した関数呼び出しの情報を保持するstruct
Definition def_types.h:111
数値と文字列をまとめて扱うためのstruct (wstring)
Definition def_types.h:84
数値と文字列をまとめて扱うためのstruct
Definition def_types.h:50
Viewの要素を表すstruct (wstring)
Definition def_types.h:289
Viewの要素を表すstruct.
Definition def_types.h:218
static constexpr auto & viewList()
Definition c_wcf_internal.h:69
wcfFuncCallback CCallback
Definition c_wcf_internal.h:63
wcfEventCallback2 CEventCallback2
Definition c_wcf_internal.h:65
static constexpr auto & funcValList()
Definition c_wcf_internal.h:68
static constexpr auto & fetchedHandles()
Definition c_wcf_internal.h:67
wcfEventCallback1 CEventCallback1
Definition c_wcf_internal.h:64
static constexpr auto & viewList()
Definition c_wcf_internal.h:81
static constexpr auto & funcValList()
Definition c_wcf_internal.h:80
wcfEventCallback1W CEventCallback1
Definition c_wcf_internal.h:76
static constexpr auto & fetchedHandles()
Definition c_wcf_internal.h:79
wcfFuncCallbackW CCallback
Definition c_wcf_internal.h:75
wcfEventCallback2W CEventCallback2
Definition c_wcf_internal.h:77
Definition c_wcf_internal.h:58
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117