using json = nlohmann::json;\r
\r
#include <string>\r
+#include <functional>\r
\r
namespace ws\r
{\r
mg_mgr mgr;\r
mg_connection *c = nullptr;\r
\r
- bool done = false;\r
+ bool isConnected = false;\r
+\r
+ std::function<void()> onConnect;\r
+ std::function<void()> onClose;\r
+ std::function<void()> onError;\r
\r
static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {\r
if (ev == MG_EV_WS_OPEN) {\r
+ puts("Open");\r
+ isConnected = true;\r
} else if (ev == MG_EV_WS_MSG) {\r
struct mg_ws_message *wm = (struct mg_ws_message *) ev_data;\r
+ printf("Msg: %.*s\n", (int)wm->data.len, wm->data.ptr);\r
std::string jsonStr(wm->data.ptr, wm->data.len);\r
auto msg = json::parse(jsonStr);\r
int op = msg["op"].get<int>();\r
}\r
else if (op == 2)\r
{\r
- MessageBoxA(NULL, "hura", "connected", MB_OK);\r
+ puts("Connected");\r
+ if (onConnect)\r
+ onConnect();\r
}\r
}\r
\r
if (ev == MG_EV_ERROR) {\r
- MessageBoxA(NULL, "", "Error", MB_OK);\r
- done = true;\r
+ printf("Error: %s\n", (char*)ev_data);\r
+ isConnected = false;\r
+ if (onError)\r
+ onError();\r
}\r
if (ev == MG_EV_CLOSE) {\r
- MessageBoxA(NULL, "", "Close", MB_OK);\r
- done = true;\r
+ puts("Close");\r
+ isConnected = false;\r
+ if (onClose)\r
+ onClose();\r
}\r
}\r
\r
\r
void update()\r
{\r
- if (c && !done)\r
+ if (c)\r
mg_mgr_poll(&mgr, 10);\r
}\r
\r
{ "d",\r
{\r
{ "requestType", requestType },\r
- { "requestId", std::to_string(NULL).c_str() }\r
+ { "requestId", std::to_string(time(nullptr)).c_str() }\r
} } };\r
auto requestStr = request.dump();\r
mg_ws_send(c, requestStr.c_str(), requestStr.size(), WEBSOCKET_OP_TEXT);\r