-// #define _WEBSOCKETPP_CPP11_INTERNAL_\r
-// #define ASIO_STANDALONE\r
-// #include <websocketpp/config/asio_no_tls_client.hpp>\r
-// #include <websocketpp/client.hpp>\r
-\r
-// using client = websocketpp::client<websocketpp::config::asio_client>;\r
-\r
#include "mongoose.h"\r
\r
#include "json.hpp"\r
using json = nlohmann::json;\r
\r
#include <string>\r
+#include <functional>\r
\r
namespace ws\r
{\r
- // client c;\r
-\r
- // void on_message(websocketpp::connection_hdl hdl, client::message_ptr msg) {\r
- // auto j = json::parse(msg->get_payload());\r
- // int op = j["op"].get<int>();\r
-\r
- // if (op == 0) {\r
- // json response = { { "op", 1 },\r
- // { "d", {\r
- // { "rpcVersion", 1 },\r
- // } } };\r
- // auto responseStr = response.dump();\r
- // websocketpp::lib::error_code ec;\r
- // c.send(hdl, responseStr, websocketpp::frame::opcode::TEXT, ec);\r
- // if (ec)\r
- // MessageBoxA(NULL, ec.message().c_str(), "error", MB_OK);\r
- // } else if (op == 2) {\r
- // MessageBoxA(NULL, "hura", "connected", MB_OK);\r
- // }\r
- // }\r
-\r
- // void init()\r
- // {\r
- // c.set_access_channels(websocketpp::log::alevel::all);\r
- // c.clear_access_channels(websocketpp::log::alevel::frame_payload);\r
- // c.set_error_channels(websocketpp::log::elevel::all);\r
-\r
- // // Initialize ASIO\r
- // c.init_asio();\r
-\r
- // // Register our message handler\r
- // c.set_message_handler(&on_message);\r
- // }\r
-\r
- // void connect(std::string address)\r
- // {\r
- // websocketpp::lib::error_code ec;\r
- // client::connection_ptr con = c.get_connection(address, ec);\r
- // if (ec) {\r
- // std::cout << "could not create connection because: " << ec.message() << std::endl;\r
- // return;\r
- // }\r
-\r
- // c.connect(con);\r
- // }\r
-\r
- // void update()\r
- // {\r
- // c.run_one();\r
- // }\r
-\r
-\r
-\r
-\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_ERROR || ev == MG_EV_CLOSE) {\r
- MessageBoxA(NULL, "", "Error", MB_OK);\r
- } else if (ev == MG_EV_WS_OPEN) {\r
- //mg_ws_send(c, "hello", 5, WEBSOCKET_OP_TEXT);\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
};\r
auto responseStr = response.dump();\r
- MessageBoxA(NULL,\r
- (std::string("is_client") + std::to_string(c->is_client) +\r
- std::string(" is_accepted") + std::to_string(c->is_accepted) +\r
- std::string(" is_readable") + std::to_string(c->is_readable) +\r
- std::string(" is_writable") + std::to_string(c->is_writable)).c_str(),\r
- "", MB_OK);\r
- mg_ws_send(c, "{\"op\":1,\"d\":{\"rpcVersion\":1}}", 29, WEBSOCKET_OP_TEXT);\r
+ mg_ws_send(c, responseStr.c_str(), responseStr.size(), WEBSOCKET_OP_TEXT);\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 || ev == MG_EV_CLOSE) {\r
- done = true;\r
+ if (ev == MG_EV_ERROR) {\r
+ printf("Error: %s\n", (char*)ev_data);\r
+ isConnected = false;\r
+ if (onError)\r
+ onError();\r
+ }\r
+ if (ev == MG_EV_CLOSE) {\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
- else\r
- MessageBoxA(NULL, "cant update", "Nio", MB_OK);\r
}\r
\r
- void identify()\r
+ void sendRequest(std::string requestType)\r
{\r
- MessageBoxA(NULL,\r
- (std::string("is_client") + std::to_string(c->is_client) +\r
- std::string(" is_accepted") + std::to_string(c->is_accepted) +\r
- std::string(" is_readable") + std::to_string(c->is_readable) +\r
- std::string(" is_writable") + std::to_string(c->is_writable)).c_str(),\r
- "", MB_OK);\r
- mg_ws_send(c, "{\"op\":1,\"d\":{\"rpcVersion\":1}}", 29, WEBSOCKET_OP_TEXT);\r
+ json request = { { "op", 6 },\r
+ { "d",\r
+ {\r
+ { "requestType", requestType },\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
}\r
}
\ No newline at end of file