#include "HttpServer.h" #include "GlobalVar.h" #include #include #pragma comment(lib,"jsoncpp_static.lib") void HttpServer::run() { struct mg_mgr mgr; // Event manager mg_log_set("2"); // Set to 3 to enable debug mg_mgr_init(&mgr); // Initialise event manager mg_http_listen(&mgr, s_http_addr, fn, NULL); // Create HTTP listener mg_http_listen(&mgr, s_https_addr, fn, (void *)1); // HTTPS listener std::cout << "HttpServerÆô¶¯..." << s_http_addr << std::endl; std::cout << "HttpServersÆô¶¯..." << s_https_addr << std::endl; for (;;) mg_mgr_poll(&mgr, 1000); // Infinite event loop mg_mgr_free(&mgr); } void HttpServer::run(int httpPort, int httpsPort) { std::stringstream http; http << "http://0.0.0.0:" << httpPort; std::stringstream https; https << "http://0.0.0.0:" << httpsPort; struct mg_mgr mgr; // Event manager mg_log_set("2"); // Set to 3 to enable debug mg_mgr_init(&mgr); // Initialise event manager mg_http_listen(&mgr, http.str().c_str(), fn, NULL); // Create HTTP listener mg_http_listen(&mgr, https.str().c_str(), fn, (void *)1); // HTTPS listener std::cout << "HttpServerÆô¶¯..." << http.str() << std::endl; std::cout << "HttpServersÆô¶¯..." << https.str() << std::endl; for (;;) mg_mgr_poll(&mgr, 1000); // Infinite event loop mg_mgr_free(&mgr); } void HttpServer::fn(mg_connection * c, int ev, void * ev_data, void * fn_data) { if (ev == MG_EV_ACCEPT && fn_data != NULL) { struct mg_tls_opts opts; opts.cert = "server.pem"; // Certificate PEM file opts.certkey = "server.pem"; // This pem contains both cert and key mg_tls_init(c, &opts); } else if (ev == MG_EV_HTTP_MSG) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; if (mg_http_match_uri(hm, "/api/f1")) { mg_http_reply(c, 200, "", "{\"result\": %d}\n", 123); // Serve REST } else if (mg_http_match_uri(hm, "/api/f2/*")) { mg_http_reply(c, 200, "", "{\"result\": \"%.*s\"}\n", (int)hm->uri.len, hm->uri.ptr); } else if (mg_http_match_uri(hm, "/api/getGroupTalkingNum")) { auto groupTalkingNum = GlobalVar::GetInstance()->getGroupTalkingNum(); Json::Value root; Json::StreamWriterBuilder builder; auto it = groupTalkingNum.begin(); while (it != groupTalkingNum.end()) { root[it->first] = it->second; ++it; } std::string str = Json::writeString(builder, root); if (str == "" || str == "null" || str.empty()) str = "{}"; mg_http_reply(c, 200, "", "%s\n", str.c_str()); std::stringstream ss; ss << GetCurTime() << " " << "" << "\n" << str << std::endl; print(ss.str()); } else { /*struct mg_http_serve_opts opts = { .root_dir = s_root_dir };*/ /*struct mg_http_serve_opts opts; opts.root_dir = s_root_dir; mg_http_serve_dir(c, hm, &opts);*/ } } (void)fn_data; }