MCPcopy Create free account
hub / github.com/RGAA-Software/GoDesk / AddWebsocketRouter

Method AddWebsocketRouter

src/render/plugins/net_ws/ws_server.cpp:181–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

179 }
180
181 void WsPluginServer::AddWebsocketRouter(const std::string &path) {
182 auto fn_get_socket_fd = [](std::shared_ptr<asio2::http_session> &sess_ptr) -> uint64_t {
183 auto& s = sess_ptr->socket();
184 return (uint64_t)s.native_handle();
185 };
186 server_->bind(path, websocket::listener<asio2::http_session>{}
187 .on("message", [=, this](std::shared_ptr<asio2::http_session> &sess_ptr, std::string_view data) {
188 auto socket_fd = fn_get_socket_fd(sess_ptr);
189 if (path == kUrlMedia) {
190 stream_routers_.VisitAll([=](auto k, std::shared_ptr<WsStreamRouter>& router) mutable {
191 if (socket_fd == k) {
192 router->OnMessage(sess_ptr, socket_fd, data);
193 }
194 });
195 }
196 else if (path == kUrlFileTransfer) {
197 ft_routers_.VisitAll([=](auto k, auto &router) mutable {
198 if (socket_fd == k) {
199 router->OnMessage(sess_ptr, socket_fd, data);
200 }
201 });
202 }
203 })
204 .on("open", [=, this](std::shared_ptr<asio2::http_session> &sess_ptr) {
205 auto query = sess_ptr->get_request().get_query();
206 auto params = UrlHelper::ParseQueryString(std::string(query.data(), query.size()));
207 for (const auto& [k, v] : params) {
208 LOGI("query param, k: {}, v: {}", k, v);
209 }
210 LOGI("App server {} open, query: {}", path, query);
211 bool only_audio = std::atoi(params["only_audio"].c_str()) == 1;
212 std::string server_device_id;
213 std::string visitor_device_id;
214 std::string stream_id;
215 bool force_gdi = false;
216 if (params.contains("remote_device_id")) {
217 server_device_id = params["remote_device_id"];
218 }
219 if (params.contains("visitor_device_id")) {
220 visitor_device_id = params["visitor_device_id"];
221 }
222 if (params.contains("stream_id")) {
223 stream_id = params["stream_id"];
224 }
225 if (params.contains("force_gdi")) {
226 force_gdi = [&]() {
227 if (auto v = params["force_gdi"]; v == "true") {
228 return true;
229 }
230 return false;
231 } ();
232 }
233
234 LOGI("Force GDI : {}", force_gdi);
235
236 // TEST //
237 if (stream_id.empty()) {
238 LOGE("!!!MUST HAVE STREAM ID!!!");

Callers

nothing calls this directly

Calls 4

RemoveMethod · 0.80
OnMessageMethod · 0.45
CallbackEventMethod · 0.45
OnOpenMethod · 0.45

Tested by

no test coverage detected