1 #include "mongoose.h"
\r
4 using json = nlohmann::json;
\r
7 #include <functional>
\r
12 mg_connection *c = nullptr;
\r
14 bool isConnected = false;
\r
16 std::function<void()> onConnect;
\r
17 std::function<void()> onClose;
\r
18 std::function<void()> onError;
\r
20 static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
\r
21 if (ev == MG_EV_WS_OPEN) {
\r
24 } else if (ev == MG_EV_WS_MSG) {
\r
25 struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;
\r
26 printf("Msg: %.*s\n", (int)wm->data.len, wm->data.ptr);
\r
27 std::string jsonStr(wm->data.ptr, wm->data.len);
\r
28 auto msg = json::parse(jsonStr);
\r
29 int op = msg["op"].get<int>();
\r
38 auto responseStr = response.dump();
\r
39 mg_ws_send(c, responseStr.c_str(), responseStr.size(), WEBSOCKET_OP_TEXT);
\r
49 if (ev == MG_EV_ERROR) {
\r
50 printf("Error: %s\n", (char*)ev_data);
\r
51 isConnected = false;
\r
55 if (ev == MG_EV_CLOSE) {
\r
57 isConnected = false;
\r
68 void connect(std::string address)
\r
70 c = mg_ws_connect(&mgr, address.c_str(), cb, nullptr, nullptr);
\r
76 mg_mgr_poll(&mgr, 10);
\r
79 void sendRequest(std::string requestType)
\r
81 json request = { { "op", 6 },
\r
84 { "requestType", requestType },
\r
85 { "requestId", std::to_string(time(nullptr)).c_str() }
\r
87 auto requestStr = request.dump();
\r
88 mg_ws_send(c, requestStr.c_str(), requestStr.size(), WEBSOCKET_OP_TEXT);
\r