]> gitweb.ps.run Git - autorec/blob - src/ws.h
MVP
[autorec] / src / ws.h
1 #include "mongoose.h"\r
2 \r
3 #include "json.hpp"\r
4 using json = nlohmann::json;\r
5 \r
6 #include <string>\r
7 \r
8 namespace ws\r
9 {\r
10   mg_mgr mgr;\r
11   mg_connection *c = nullptr;\r
12 \r
13   bool done = false;\r
14 \r
15   static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {\r
16     if (ev == MG_EV_WS_OPEN) {\r
17     } else if (ev == MG_EV_WS_MSG) {\r
18       struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;\r
19       std::string jsonStr(wm->data.ptr, wm->data.len);\r
20       auto msg = json::parse(jsonStr);\r
21       int op = msg["op"].get<int>();\r
22       \r
23       if (op == 0) {\r
24         json response = {\r
25           {"op", 1},\r
26           {"d", {\r
27             {"rpcVersion", 1},\r
28           }}\r
29         };\r
30         auto responseStr = response.dump();\r
31         mg_ws_send(c, responseStr.c_str(), responseStr.size(), WEBSOCKET_OP_TEXT);\r
32       }\r
33       else if (op == 2)\r
34       {\r
35         MessageBoxA(NULL, "hura", "connected", MB_OK);\r
36       }\r
37     }\r
38 \r
39     if (ev == MG_EV_ERROR) {\r
40       MessageBoxA(NULL, "", "Error", MB_OK);\r
41       done = true;\r
42     }\r
43     if (ev == MG_EV_CLOSE) {\r
44       MessageBoxA(NULL, "", "Close", MB_OK);\r
45       done = true;\r
46     }\r
47   }\r
48 \r
49   void init()\r
50   {\r
51     mg_mgr_init(&mgr);\r
52   }\r
53 \r
54   void connect(std::string address)\r
55   {\r
56     c = mg_ws_connect(&mgr, address.c_str(), cb, nullptr, nullptr);\r
57   }\r
58 \r
59   void update()\r
60   {\r
61     if (c && !done)\r
62       mg_mgr_poll(&mgr, 10);\r
63   }\r
64 \r
65   void sendRequest(std::string requestType)\r
66   {\r
67     json request = { { "op", 6 },\r
68                       { "d",\r
69                         {\r
70                           { "requestType", requestType },\r
71                           { "requestId", std::to_string(NULL).c_str() }\r
72                         } } };\r
73     auto requestStr = request.dump();\r
74     mg_ws_send(c, requestStr.c_str(), requestStr.size(), WEBSOCKET_OP_TEXT);\r
75   }\r
76 }