中间件底层,websocket

HttpServer.cpp 2.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "HttpServer.h"
  2. #include "GlobalVar.h"
  3. #include <iostream>
  4. #include <json/json.h>
  5. #pragma comment(lib,"jsoncpp_static.lib")
  6. void HttpServer::run()
  7. {
  8. struct mg_mgr mgr; // Event manager
  9. mg_log_set("2"); // Set to 3 to enable debug
  10. mg_mgr_init(&mgr); // Initialise event manager
  11. mg_http_listen(&mgr, s_http_addr, fn, NULL); // Create HTTP listener
  12. mg_http_listen(&mgr, s_https_addr, fn, (void *)1); // HTTPS listener
  13. std::cout << "HttpServerÆô¶¯..." << s_http_addr << std::endl;
  14. std::cout << "HttpServersÆô¶¯..." << s_https_addr << std::endl;
  15. for (;;) mg_mgr_poll(&mgr, 1000); // Infinite event loop
  16. mg_mgr_free(&mgr);
  17. }
  18. void HttpServer::run(int httpPort, int httpsPort)
  19. {
  20. std::stringstream http;
  21. http << "http://0.0.0.0:" << httpPort;
  22. std::stringstream https;
  23. https << "http://0.0.0.0:" << httpsPort;
  24. struct mg_mgr mgr; // Event manager
  25. mg_log_set("2"); // Set to 3 to enable debug
  26. mg_mgr_init(&mgr); // Initialise event manager
  27. mg_http_listen(&mgr, http.str().c_str(), fn, NULL); // Create HTTP listener
  28. mg_http_listen(&mgr, https.str().c_str(), fn, (void *)1); // HTTPS listener
  29. std::cout << "HttpServerÆô¶¯..." << http.str() << std::endl;
  30. std::cout << "HttpServersÆô¶¯..." << https.str() << std::endl;
  31. for (;;) mg_mgr_poll(&mgr, 1000); // Infinite event loop
  32. mg_mgr_free(&mgr);
  33. }
  34. void HttpServer::fn(mg_connection * c, int ev, void * ev_data, void * fn_data)
  35. {
  36. if (ev == MG_EV_ACCEPT && fn_data != NULL) {
  37. struct mg_tls_opts opts;
  38. opts.cert = "server.pem"; // Certificate PEM file
  39. opts.certkey = "server.pem"; // This pem contains both cert and key
  40. mg_tls_init(c, &opts);
  41. }
  42. else if (ev == MG_EV_HTTP_MSG) {
  43. struct mg_http_message *hm = (struct mg_http_message *) ev_data;
  44. if (mg_http_match_uri(hm, "/api/f1")) {
  45. mg_http_reply(c, 200, "", "{\"result\": %d}\n", 123); // Serve REST
  46. }
  47. else if (mg_http_match_uri(hm, "/api/f2/*")) {
  48. mg_http_reply(c, 200, "", "{\"result\": \"%.*s\"}\n", (int)hm->uri.len,
  49. hm->uri.ptr);
  50. }
  51. else if (mg_http_match_uri(hm, "/api/getGroupTalkingNum")) {
  52. auto groupTalkingNum = GlobalVar::GetInstance()->getGroupTalkingNum();
  53. Json::Value root;
  54. Json::StreamWriterBuilder builder;
  55. auto it = groupTalkingNum.begin();
  56. while (it != groupTalkingNum.end())
  57. {
  58. root[it->first] = it->second;
  59. ++it;
  60. }
  61. std::string str = Json::writeString(builder, root);
  62. if (str == "" || str == "null" || str.empty())
  63. str = "{}";
  64. mg_http_reply(c, 200, "", "%s\n", str.c_str());
  65. std::stringstream ss;
  66. ss << GetCurTime() << " " << "" << "\n" << str << std::endl;
  67. print(ss.str());
  68. }
  69. else {
  70. /*struct mg_http_serve_opts opts = { .root_dir = s_root_dir };*/
  71. /*struct mg_http_serve_opts opts;
  72. opts.root_dir = s_root_dir;
  73. mg_http_serve_dir(c, hm, &opts);*/
  74. }
  75. }
  76. (void)fn_data;
  77. }