]> gitweb.ps.run Git - autorec/blobdiff - src/ws.h
Why didnt I commit these
[autorec] / src / ws.h
index 82d79767fdbf2a2ec6d212e5e12f40c8d0ba3348..d3acb2763f99fe5753a005999dea650c562c2ba3 100644 (file)
--- a/src/ws.h
+++ b/src/ws.h
@@ -1,86 +1,29 @@
-// #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
@@ -93,22 +36,27 @@ namespace ws
           }}\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
@@ -124,20 +72,19 @@ namespace ws
 \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