CServerList.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. //std::vector<std::string> tags;
  14. vectlistmode.clear();
  15. nlohmann::json j = nlohmann::json::parse(data.begin(), data.end());
  16. if (j["code"].get<int>() == 0)
  17. {
  18. auto data = j["data"];
  19. for (int i = 0; i < data.size(); i++) {
  20. CServerListMode m_serverlist_mode;
  21. m_serverlist_mode.type = data[i]["type"].get<std::string>();
  22. m_serverlist_mode.id = data[i]["id"].get<int>();
  23. m_serverlist_mode.name = data[i]["name"].get<std::string>();
  24. m_serverlist_mode.host = data[i]["host"].get<std::string>();
  25. m_serverlist_mode.port = data[i]["port"].get<int>();
  26. m_serverlist_mode.created_at = data[i]["created_at"].get<int>();
  27. m_serverlist_mode.rate = data[i]["rate"].get<std::string>();
  28. if (!data[i]["tags"].is_null())
  29. {
  30. auto tgass = data[i]["tags"];
  31. for (int i = 0; i < tgass.size(); i++)
  32. {
  33. if (!tgass[i].is_null())
  34. {
  35. m_serverlist_mode.tags.push_back(tgass[i].get<std::string>());
  36. }
  37. }
  38. }
  39. if (m_serverlist_mode.type == "shadowsocks")
  40. {
  41. if (!data[i]["cipher"].is_null())
  42. {
  43. m_serverlist_mode.method = data[i]["cipher"].get<std::string>();
  44. }
  45. }
  46. if (m_serverlist_mode.type == "v2ray")
  47. {
  48. if (!data[i]["tlsSettings"].is_null())
  49. {
  50. m_serverlist_mode.serverName = data[i]["tlsSettings"]["serverName"].get<std::string>();
  51. m_serverlist_mode.allowInsecure = data[i]["tlsSettings"]["allowInsecure"].get<std::string>();
  52. }
  53. if (!data[i]["tls"].is_null())
  54. {
  55. m_serverlist_mode.tls = data[i]["tls"].get<int>();
  56. }
  57. }
  58. if (m_serverlist_mode.type == "trojan") {
  59. if (!data[i]["server_name"].is_null())
  60. {
  61. m_serverlist_mode.serverName = data[i]["server_name"].get<std::string>();
  62. }
  63. if (!data[i]["allow_insecure"].is_null())
  64. {
  65. m_serverlist_mode.allowInsecure = std::to_string(data[i]["allow_insecure"].get<int>());
  66. }
  67. }
  68. vectlistmode.push_back(m_serverlist_mode);
  69. }
  70. /*for (auto it = vectlistmode.begin(); it != vectlistmode.end(); ++it)
  71. {
  72. if (CApp::getSingletonPtr()->GetSelectNodeById() != (*it).created_at)
  73. {
  74. CApp::getSingletonPtr()->SetSelectNodeById((*it).created_at);
  75. break;
  76. }
  77. }*/
  78. return true;
  79. }
  80. if (j["code"].get<int>() == 445 || j["code"].get<int>() == 446)
  81. {
  82. this->m_error_msg = S_CA2W(j["message"].get<std::string>().c_str(), CP_UTF8).GetBuffer(0);
  83. return false;
  84. }
  85. else
  86. {
  87. this->m_error_msg = S_CA2W(j["message"].get<std::string>().c_str(), CP_UTF8).GetBuffer(0);
  88. return false;
  89. }
  90. }
  91. catch (...)
  92. {
  93. this->m_error_msg = L"解析数据错误,点击右上角刷新";
  94. return false;
  95. }
  96. }
  97. //bool GreaterSort(CServerListMode a, CServerListMode b)
  98. //{
  99. // return a.online_users < b.online_users;
  100. //}
  101. void CServerList::MinimumSelectNode()
  102. {
  103. /*if (vectlistmode.empty())
  104. {
  105. return;
  106. }
  107. auto t = vectlistmode;
  108. std::sort(t.begin(), t.end(), GreaterSort);
  109. if (!t.empty())
  110. {
  111. for each (CServerListMode itme in t)
  112. {
  113. if (itme.online_users > 0 && strcmp(itme.country_code.c_str(),"hk") == 0)
  114. {
  115. node_name = itme.name;
  116. break;
  117. }
  118. }
  119. }*/
  120. }