WebCFace 2.5.2
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("") {}
42 explicit Client(const std::string &name,
43 const std::string &host = "127.0.0.1",
44 int port = WEBCFACE_DEFAULT_PORT)
45 : Client(SharedString::encode(name), SharedString::encode(host), port) {
46 }
58 explicit Client(const std::wstring &name,
59 const std::wstring &host = L"127.0.0.1",
60 int port = WEBCFACE_DEFAULT_PORT)
61 : Client(SharedString::encode(name), SharedString::encode(host), port) {
62 }
63
64 explicit Client(const SharedString &name, const SharedString &host,
65 int port);
66 explicit Client(const SharedString &name,
67 const std::shared_ptr<internal::ClientData> &data);
68
73 bool connected() const;
78 ~Client();
83 const Client &close() const;
84
93 const Client &autoReconnect(bool enabled) const;
98 bool autoReconnect() const;
99
105 const Client &start() const;
118 const Client &waitConnection() const;
119
120 private:
121 const Client &
122 syncImpl(std::optional<std::chrono::microseconds> timeout) const;
123
124 public:
139 const Client &sync() const {
140 return syncImpl(std::chrono::microseconds(0));
141 }
155 const Client &loopSyncFor(std::chrono::microseconds timeout) const {
156 return syncImpl(timeout);
157 }
167 template <typename Clock, typename Duration>
168 const Client &
169 loopSyncUntil(std::chrono::time_point<Clock, Duration> timeout) const {
170 return syncImpl(std::chrono::duration_cast<std::chrono::microseconds>(
171 timeout - Clock::now()));
172 }
184 const Client &loopSync() const { return syncImpl(std::nullopt); }
185
186 // /*!
187 // * \brief 別スレッドでsync()を自動的に呼び出す間隔を設定する。
188 // * \since ver2.0
189 // *
190 // * * start() や waitConnection() より前に設定する必要がある。
191 // * *
192 // autoSyncが有効の場合、別スレッドで一定間隔(100μs)ごとにsync()が呼び出され、
193 // * 各種コールバック (onEntry, onChange, Func::run()など)
194 // * も別のスレッドで呼ばれることになる
195 // * (そのためmutexなどを適切に設定すること)
196 // * * デフォルトでは無効なので、手動でsync()などを呼び出す必要がある
197 // *
198 // * \param enabled trueにすると自動でsync()が呼び出されるようになる
199 // * \sa sync(), loopSyncFor(), loopSyncUntil(), loopSync()
200 // */
201 // void autoSync(bool enabled);
202
203 private:
204 Member member(const SharedString &name) const {
205 if (name.empty()) {
206 return *this;
207 } else {
208 return Member{data, name};
209 }
210 }
211
212 public:
220 Member member(std::string_view name) const {
221 return member(SharedString::encode(name));
222 }
230 Member member(std::wstring_view name) const {
231 return member(SharedString::encode(name));
232 }
239 std::vector<Member> members();
247 std::vector<Member> members() const;
255 const Client &
256 onMemberEntry(std::function<void WEBCFACE_CALL_FP(Member)> callback) const;
257
273 std::streambuf *loggerStreamBuf() const;
281 std::streambuf *loggerStreamBuf(std::string_view name) const;
294 std::ostream &loggerOStream() const;
302 std::ostream &loggerOStream(std::string_view name) const;
308 std::wstreambuf *loggerWStreamBuf() const;
316 std::wstreambuf *loggerWStreamBuf(std::wstring_view name) const;
322 std::wostream &loggerWOStream() const;
330 std::wostream &loggerWOStream(std::wstring_view name) const;
331
336 const std::string &serverVersion() const;
344 const std::string &serverName() const;
349 const std::string &serverHostName() const;
350};
351
サーバーに接続するクライアント。
Definition client.h:18
const Client & loopSyncFor(std::chrono::microseconds timeout) const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:155
const Client & loopSync() const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:184
const Client & loopSyncUntil(std::chrono::time_point< Clock, Duration > timeout) const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:169
Client()
名前を指定せずサーバーに接続する
Definition client.h:31
Client(const Client &)=delete
Client(const std::wstring &name, const std::wstring &host=L"127.0.0.1", int port=7530)
名前を指定しサーバーに接続する (wstring)
Definition client.h:58
const Client & sync() const
送信用にセットしたデータをすべて送信キューに入れ、受信したデータを処理する。
Definition client.h:139
Member member(std::string_view name) const
他のmemberにアクセスする
Definition client.h:220
Client(const std::string &name, const std::string &host="127.0.0.1", int port=7530)
名前を指定しサーバーに接続する
Definition client.h:42
Member member(std::wstring_view name) const
他のmemberにアクセスする (wstring)
Definition client.h:230
const Client & operator=(const Client &)=delete
Memberを指すクラス
Definition member.h:22
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:69
bool empty() const
Definition encoding.cc:118
Member member() const
Memberを返す
Definition field.cc:21
#define WEBCFACE_DLL
Definition webcface-config.h:60
#define WEBCFACE_NS_END
Definition webcface-config.h:104
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:103
#define WEBCFACE_DEFAULT_PORT
Definition webcface-config.h:4
#define WEBCFACE_CALL_FP
Definition webcface-config.h:98