CServerList.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #include "stdafx.h"
  2. #include "CServerList.h"
  3. CServerList::CServerList()
  4. {
  5. }
  6. CServerList::~CServerList()
  7. {
  8. }
  9. bool CServerList::Init(std::string data)
  10. {
  11. try
  12. {
  13. vectlistmode.clear();
  14. nlohmann::json j = nlohmann::json::parse(data.begin(), data.end());
  15. if (j["code"].get<int>() == 0)
  16. {
  17. auto data = j["data"];
  18. for (int i = 0; i < data.size(); i++) {
  19. CServerListMode m_serverlist_mode;
  20. m_serverlist_mode.type = data[i]["type"].get<std::string>();
  21. m_serverlist_mode.id = data[i]["id"].get<int>();
  22. m_serverlist_mode.name = data[i]["name"].get<std::string>();
  23. m_serverlist_mode.host = data[i]["host"].get<std::string>();
  24. m_serverlist_mode.port = data[i]["port"].get<int>();
  25. if (m_serverlist_mode.type == "shadowsocks")
  26. {
  27. if (!data[i]["cipher"].is_null())
  28. {
  29. m_serverlist_mode.method = data[i]["cipher"].get<std::string>();
  30. }
  31. }
  32. if (m_serverlist_mode.type == "v2ray")
  33. {
  34. if (!data[i]["tlsSettings"].is_null())
  35. {
  36. m_serverlist_mode.serverName = data[i]["tlsSettings"]["serverName"].get<std::string>();
  37. m_serverlist_mode.allowInsecure = data[i]["tlsSettings"]["allowInsecure"].get<std::string>();
  38. }
  39. if (!data[i]["tls"].is_null())
  40. {
  41. m_serverlist_mode.tls = data[i]["tls"].get<int>();
  42. }
  43. }
  44. if (m_serverlist_mode.type == "trojan") {
  45. if (!data[i]["server_name"].is_null())
  46. {
  47. m_serverlist_mode.serverName = data[i]["server_name"].get<std::string>();
  48. }
  49. if (!data[i]["allow_insecure"].is_null())
  50. {
  51. m_serverlist_mode.allowInsecure = std::to_string(data[i]["allow_insecure"].get<int>());
  52. }
  53. }
  54. vectlistmode.push_back(m_serverlist_mode);
  55. }
  56. return true;
  57. }
  58. if (j["code"].get<int>() == 445 || j["code"].get<int>() == 446)
  59. {
  60. this->m_error_msg = S_CA2W(j["message"].get<std::string>().c_str(), CP_UTF8).GetBuffer(0);
  61. return false;
  62. }
  63. else
  64. {
  65. this->m_error_msg = S_CA2W(j["message"].get<std::string>().c_str(), CP_UTF8).GetBuffer(0);
  66. return false;
  67. }
  68. }
  69. catch (...)
  70. {
  71. this->m_error_msg = L"解析数据错误,点击右上角刷新";
  72. return false;
  73. }
  74. }
  75. //bool GreaterSort(CServerListMode a, CServerListMode b)
  76. //{
  77. // return a.online_users < b.online_users;
  78. //}
  79. void CServerList::MinimumSelectNode()
  80. {
  81. /*if (vectlistmode.empty())
  82. {
  83. return;
  84. }
  85. auto t = vectlistmode;
  86. std::sort(t.begin(), t.end(), GreaterSort);
  87. if (!t.empty())
  88. {
  89. for each (CServerListMode itme in t)
  90. {
  91. if (itme.online_users > 0 && strcmp(itme.country_code.c_str(),"hk") == 0)
  92. {
  93. node_name = itme.name;
  94. break;
  95. }
  96. }
  97. }*/
  98. }