CServerList.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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["ret"].get<int>() == 1)
  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.group = data[i]["group"].get<std::string>();
  25. m_serverlist_mode.online_users = data[i]["online_users"].get<int>();
  26. if (m_serverlist_mode.type == "shadowsocks")
  27. {
  28. m_serverlist_mode.method = data[i]["method"].get<std::string>();
  29. m_serverlist_mode.passwd = data[i]["passwd"].get<std::string>();
  30. }
  31. else if (m_serverlist_mode.type == "v2ray")
  32. {
  33. m_serverlist_mode.method = data[i]["method"].get<std::string>();
  34. m_serverlist_mode.uuid = data[i]["uuid"].get<std::string>();
  35. m_serverlist_mode.v2_net = data[i]["v2_net"].get<std::string>();
  36. m_serverlist_mode.v2_type = data[i]["v2_type"].get<std::string>();
  37. m_serverlist_mode.v2_host = data[i]["v2_host"].get<std::string>();
  38. m_serverlist_mode.v2_path = data[i]["v2_path"].get<std::string>();
  39. m_serverlist_mode.v2_tls = data[i]["v2_tls"].get<std::string>();
  40. m_serverlist_mode.v2_sni = data[i]["v2_sni"].get<std::string>();
  41. }
  42. else if (m_serverlist_mode.type == "trojan") {
  43. m_serverlist_mode.passwd = data[i]["passwd"].get<std::string>();
  44. m_serverlist_mode.sni = data[i]["sni"].get<std::string>();
  45. }
  46. m_serverlist_mode.udp = data[i]["udp"].get<int>();
  47. m_serverlist_mode.port = data[i]["port"].get<int>();
  48. vectlistmode.push_back(m_serverlist_mode);
  49. }
  50. return true;
  51. }
  52. if (j["ret"].get<int>() == 445 || j["ret"].get<int>() == 446)
  53. {
  54. this->m_error_msg = S_CA2W(j["msg"].get<std::string>().c_str(), CP_UTF8).GetBuffer(0);
  55. return false;
  56. }
  57. else
  58. {
  59. this->m_error_msg = S_CA2W(j["msg"].get<std::string>().c_str(), CP_UTF8).GetBuffer(0);
  60. return false;
  61. }
  62. }
  63. catch (...)
  64. {
  65. this->m_error_msg = L"解析数据错误,点击右上角刷新";
  66. return false;
  67. }
  68. }
  69. bool GreaterSort(CServerListMode a, CServerListMode b)
  70. {
  71. return a.online_users < b.online_users;
  72. }
  73. void CServerList::MinimumSelectNode()
  74. {
  75. if (vectlistmode.empty())
  76. {
  77. return;
  78. }
  79. auto t = vectlistmode;
  80. std::sort(t.begin(), t.end(), GreaterSort);
  81. if (!t.empty())
  82. {
  83. for each (CServerListMode itme in t)
  84. {
  85. if (itme.online_users > 0)
  86. {
  87. node_name = itme.name;
  88. break;
  89. }
  90. }
  91. }
  92. }