WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
client.h
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <memory>
4#include <vector>
5#include "member.h"
6#ifdef WEBCFACE_MESON
7#include "webcface-config.h"
8#else
9#include "webcface/common/webcface-config.h"
10#endif
11
13
18class WEBCFACE_DLL Client : public Member {
19 std::shared_ptr<internal::ClientData> data;
20
21 public:
22 Client(const Client &) = delete;
23 const Client &operator=(const Client &) = delete;
24
31 Client() : Client("") {}
43 explicit Client(StringInitializer name, StringInitializer host = "127.0.0.1",
44 int port = WEBCFACE_DEFAULT_PORT)
45 : Client(static_cast<SharedString &>(name),
46 static_cast<SharedString &>(host), port) {}
47
48 explicit Client(const SharedString &name, const SharedString &host,
49 int port);
50 explicit Client(const SharedString &name,
51 const std::shared_ptr<internal::ClientData> &data);
52
58 bool connected() const;
59
67 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
68 std::nullptr_t> = nullptr>
69 const Client &onDisconnect(F callback) const {
71 [callback = std::move(callback)](const auto &) { callback(); });
72 return *this;
73 }
83 template <typename F, typename std::enable_if_t<std::is_invocable_v<F>,
84 std::nullptr_t> = nullptr>
85 const Client &onConnect(F callback) const {
87 [callback = std::move(callback)](const auto &) { callback(); });
88 return *this;
89 }
90
95 ~Client();
100 const Client &close() const;
101
110 const Client &autoReconnect(bool enabled) const;
115 bool autoReconnect() const;
116
122 const Client &start() const;
135 const Client &waitConnection() const;
136
137 private:
138 const Client &
139 syncImpl(std::optional<std::chrono::microseconds> timeout) const;
140
141 public:
156 const Client &sync() const {
157 return syncImpl(std::chrono::microseconds(0));
158 }
172 const Client &loopSyncFor(std::chrono::microseconds timeout) const {
173 return syncImpl(timeout);
174 }
184 template <typename Clock, typename Duration>
185 const Client &
186 loopSyncUntil(std::chrono::time_point<Clock, Duration> timeout) const {
187 return syncImpl(std::chrono::duration_cast<std::chrono::microseconds>(
188 timeout - Clock::now()));
189 }
201 const Client &loopSync() const { return syncImpl(std::nullopt); }
202
203 // /*!
204 // * \brief 別スレッドでsync()を自動的に呼び出す間隔を設定する。
205 // * \since ver2.0
206 // *
207 // * * start() や waitConnection() より前に設定する必要がある。
208 // * *
209 // autoSyncが有効の場合、別スレッドで一定間隔(100μs)ごとにsync()が呼び出され、
210 // * 各種コールバック (onEntry, onChange, Func::run()など)
211 // * も別のスレッドで呼ばれることになる
212 // * (そのためmutexなどを適切に設定すること)
213 // * * デフォルトでは無効なので、手動でsync()などを呼び出す必要がある
214 // *
215 // * \param enabled trueにすると自動でsync()が呼び出されるようになる
216 // * \sa sync(), loopSyncFor(), loopSyncUntil(), loopSync()
217 // */
218 // void autoSync(bool enabled);
219
220 private:
221 Member member(const SharedString &name) const {
222 if (name.empty()) {
223 return *this;
224 } else {
225 return Member{data, name};
226 }
227 }
228
229 public:
239 return member(static_cast<SharedString &>(name));
240 }
247 std::vector<Member> members();
255 std::vector<Member> members() const;
263 const Client &
264 onMemberEntry(std::function<void WEBCFACE_CALL_FP(Member)> callback) const;
265
281 std::streambuf *loggerStreamBuf() const;
290 std::streambuf *loggerStreamBuf(const StringInitializer &name) const;
303 std::ostream &loggerOStream() const;
312 std::ostream &loggerOStream(const StringInitializer &name) const;
318 std::wstreambuf *loggerWStreamBuf() const;
327 std::wstreambuf *loggerWStreamBuf(const StringInitializer &name) const;
333 std::wostream &loggerWOStream() const;
342 std::wostream &loggerWOStream(const StringInitializer &name) const;
343
348 const std::string &serverVersion() const;
356 const std::string &serverName() const;
361 const std::string &serverHostName() const;
362};
363
サーバーに接続するクライアント。
Definition client.h:18
const Client & loopSyncFor(std::chrono::microseconds timeout) const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:172
const Client & onConnect(F callback) const
サーバーに接続したときに呼び出されるコールバックを設定
Definition client.h:85
const Client & loopSync() const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:201
Member member(StringInitializer name) const
他のmemberにアクセスする
Definition client.h:238
const Client & loopSyncUntil(std::chrono::time_point< Clock, Duration > timeout) const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:186
const Client & onDisconnect(F callback) const
切断したときに呼び出されるコールバックを設定
Definition client.h:69
Client()
名前を指定せずサーバーに接続する
Definition client.h:31
Client(StringInitializer name, StringInitializer host="127.0.0.1", int port=7530)
名前を指定しサーバーに接続する
Definition client.h:43
Client(const Client &)=delete
const Client & sync() const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:156
const Client & operator=(const Client &)=delete
Memberを指すクラス
Definition member.h:23
const Member & onConnect(std::function< void(Member)> callback) const
Memberがサーバーに接続したときに呼び出されるコールバックを設定
Definition member.cc:47
const Member & onDisconnect(std::function< void(Member)> callback) const
Memberが切断したときに呼び出されるコールバックを設定
Definition member.cc:40
bool connected() const
Memberがサーバーに接続できているときtrueを返す
Definition member.cc:30
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:159
bool empty() const
Definition encoding.cc:230
SharedString のpublicなコンストラクタインタフェース (入力専用)
Definition encoding.h:215
Member_ member() const
Memberを返す
Definition field.h:107
#define WEBCFACE_DLL
Definition webcface-config.h:69
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117
#define WEBCFACE_DEFAULT_PORT
Definition webcface-config.h:4
#define WEBCFACE_CALL_FP
Definition webcface-config.h:107