WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
member_data.h
Go to the documentation of this file.
1#pragma once
2#include <deque>
3#include <string>
4#include <unordered_map>
5#include <chrono>
6#include <optional>
7#include <mutex>
8#include <atomic>
9#include <condition_variable>
10#include <thread>
11#include <spdlog/common.h>
12#include <spdlog/logger.h>
25
27namespace server {
28
29std::pair<unsigned int, SharedString> findReqField(internal::StrMap2<unsigned int> &req,
30 const SharedString &member,
31 const SharedString &field);
32
33struct MemberData {
34 spdlog::sink_ptr sink;
35 std::shared_ptr<spdlog::logger> logger;
36 spdlog::level::level_enum logger_level;
37
39
44 std::string remote_addr;
45 bool connected() const { return con != nullptr; }
46
53 bool sync_init = false;
54
56 unsigned int member_id;
70
81 std::condition_variable image_cv;
82 std::mutex image_m;
97
98 std::chrono::system_clock::time_point last_sync_time;
100 internal::StrMap2<unsigned int> value_req, text_req, view_req, image_req,
101 view_old_req, robot_model_req, canvas3d_req, canvas3d_old_req,
102 canvas2d_req, canvas2d_old_req, log_req;
103
104 // image_convert_thread[imageのmember][imageのfield] =
105 // imageを変換してthisに送るスレッド
107 void imageConvertThreadMain(const SharedString &member,
108 const SharedString &field);
110
111 bool hasReq(const SharedString &member);
126 std::unordered_map<unsigned int, std::unordered_map<std::size_t, int>>
128
129 inline static unsigned int last_member_id = 0;
130
131 MemberData() = delete;
132 MemberData(const MemberData &) = delete;
133 MemberData &operator=(const MemberData &) = delete;
134 explicit MemberData(ServerStorage *store, const wsConnPtr &con,
135 std::string_view remote_addr,
136 const spdlog::sink_ptr &sink,
137 spdlog::level::level_enum level);
138 ~MemberData() { onClose(); }
139
140 void onConnect();
141 void onRecv(const std::string &msg);
142 void onClose();
143 std::atomic<bool> closing = false;
144
145 void sendPing();
146 static constexpr std::chrono::milliseconds ping_interval{5000};
147 std::chrono::system_clock::time_point last_send_ping;
148 std::optional<std::chrono::milliseconds> last_ping_duration;
149 bool ping_status_req = false;
150
151 std::stringstream send_buffer;
152 int send_len = 0;
153 void send();
154 void send(const std::string &msg);
155 template <typename T>
156 void send(const T &obj) {
157 logger->debug("-> sending {}", obj);
158 send(message::packSingle(obj));
159 }
160
161 template <typename T>
162 void pack(const T &obj) {
163 logger->debug("-> sending {}", obj);
164 message::pack(send_buffer, send_len, obj);
165 }
166};
167} // namespace server
u8stringとstringとwstringをshared_ptrで持ち共有する
Definition encoding.h:67
Definition store.h:14
std::map< SharedString, T > StrMap1
Definition map.h:15
StrMap1< StrMap1< T > > StrMap2
Definition map.h:17
std::set< SharedString > StrSet1
Definition map.h:18
void * wsConnPtr
Definition server.h:21
std::pair< unsigned int, SharedString > findReqField(internal::StrMap2< unsigned int > &req, const SharedString &member, const SharedString &field)
Definition member_data.cc:136
client初期化(client->server->client)
Definition sync.h:30
Definition member_data.h:33
std::mutex image_m
Definition member_data.h:82
internal::StrMap2< int > image_req_changed
Definition member_data.h:91
spdlog::sink_ptr sink
Definition member_data.h:34
SharedString name
Definition member_data.h:55
internal::StrMap2< unsigned int > canvas3d_old_req
Definition member_data.h:101
std::stringstream send_buffer
Definition member_data.h:151
std::optional< std::chrono::milliseconds > last_ping_duration
Definition member_data.h:148
internal::StrMap2< unsigned int > canvas2d_old_req
Definition member_data.h:102
internal::StrMap2< std::optional< std::thread > > image_convert_thread
Definition member_data.h:106
std::chrono::system_clock::time_point last_sync_time
Definition member_data.h:98
internal::StrMap2< unsigned int > image_req
Definition member_data.h:100
internal::StrMap1< message::ViewData > view
Definition member_data.h:67
void pack(const T &obj)
Definition member_data.h:162
std::unordered_map< unsigned int, std::unordered_map< std::size_t, int > > pending_calls
まだ完了していない自分へのcall呼び出しのリスト
Definition member_data.h:127
internal::StrMap2< message::ImageReq > image_req_info
Definition member_data.h:96
std::condition_variable image_cv
Definition member_data.h:81
internal::StrMap1< std::shared_ptr< ValAdaptor > > text
Definition member_data.h:65
void send(const T &obj)
Definition member_data.h:156
internal::StrMap1< message::ImageFrame > image
Definition member_data.h:71
std::chrono::system_clock::time_point last_send_ping
Definition member_data.h:147
internal::StrMap1< message::Canvas3DData > canvas3d
Definition member_data.h:68
internal::StrMap1< std::shared_ptr< std::vector< double > > > value
最新の値
Definition member_data.h:64
internal::StrMap1< message::Canvas2DData > canvas2d
Definition member_data.h:69
internal::StrMap1< int > image_changed
Definition member_data.h:87
wsConnPtr con
ws接続のポインタ、切断後(onClose後)nullptrになる
Definition member_data.h:43
message::SyncInit init_data
Definition member_data.h:57
~MemberData()
Definition member_data.h:138
bool connected() const
Definition member_data.h:45
internal::StrMap1< std::shared_ptr< message::FuncInfo > > func
Definition member_data.h:66
MemberData(const MemberData &)=delete
std::shared_ptr< spdlog::logger > logger
Definition member_data.h:35
spdlog::level::level_enum logger_level
Definition member_data.h:36
internal::StrMap1< std::vector< std::shared_ptr< message::RobotLink > > > robot_model
Definition member_data.h:109
ServerStorage * store
Definition member_data.h:38
MemberData & operator=(const MemberData &)=delete
internal::StrSet1 log_req_default
古いLogリクエスト ("default"のログを古いメッセージ形式で返す)
Definition member_data.h:113
unsigned int member_id
Definition member_data.h:56
std::string remote_addr
Definition member_data.h:44
internal::StrMap1< std::shared_ptr< std::deque< message::LogLine > > > log
ログ全履歴
Definition member_data.h:115
#define WEBCFACE_NS_END
Definition webcface-config.h:118
#define WEBCFACE_NS_BEGIN
Definition webcface-config.h:117