CManageNetWork.cpp 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. #include "stdafx.h"
  2. #include "CManageNetWork.h"
  3. #include "CNetWork.h"
  4. #include "CApp.h"
  5. #include "FileOperate.h"
  6. #include <nlohmann/json.hpp>
  7. CManageNetWork* SSingleton<CManageNetWork>::ms_Singleton = NULL;
  8. CManageNetWork::CManageNetWork() : m_base_curl(nullptr), m_Asyntask(4)
  9. {
  10. }
  11. CManageNetWork::~CManageNetWork()
  12. {
  13. if (m_base_curl)
  14. {
  15. delete m_base_curl;
  16. m_base_curl = nullptr;
  17. }
  18. }
  19. void CManageNetWork::init()
  20. {
  21. SNotifyCenter::getSingleton().addEvent(EVENTID(EventLogin));
  22. SNotifyCenter::getSingleton().addEvent(EVENTID(EventDoWNload));
  23. SNotifyCenter::getSingleton().addEvent(EVENTID(EventNodeList));
  24. SNotifyCenter::getSingleton().addEvent(EVENTID(EventVerions));
  25. SNotifyCenter::getSingleton().addEvent(EVENTID(EventSysconfig));
  26. if (!m_base_curl)
  27. {
  28. m_base_curl = new CNetWork();
  29. //m_base_curl.Attach(new CNetWork());
  30. }
  31. LoadFileToData();
  32. }
  33. void CManageNetWork::Login(LPCSTR username, LPCSTR password)
  34. {
  35. if (!m_base_curl)
  36. {
  37. return;
  38. }
  39. this->m_username = username;
  40. this->m_password = password;
  41. m_Asyntask.AddTask(&CManageNetWork::ThreadFun_login, this, (LPARAM)m_base_curl);
  42. }
  43. void CManageNetWork::SetUrl(LPCSTR url)
  44. {
  45. if (!m_base_curl)
  46. {
  47. return;
  48. }
  49. m_base_curl->SetUrl(url);
  50. }
  51. SStringA CManageNetWork::GetUsername()
  52. {
  53. return m_username;
  54. }
  55. SStringA CManageNetWork::GetPassWord()
  56. {
  57. return m_password;
  58. }
  59. void CManageNetWork::DonloadConfg()
  60. {
  61. if (!m_base_curl)
  62. {
  63. return;
  64. }
  65. m_Asyntask.AddTask(&CManageNetWork::ThreadFun_Dowlon_Config, this, (LPARAM)m_base_curl);
  66. }
  67. void CManageNetWork::GetNodeList()
  68. {
  69. if (!m_base_curl)
  70. {
  71. return;
  72. }
  73. m_Asyntask.AddTask(&CManageNetWork::ThreadFun_Node_Config, this, (LPARAM)m_base_curl);
  74. }
  75. void CManageNetWork::GetVersion()
  76. {
  77. if (!m_base_curl)
  78. {
  79. return;
  80. }
  81. m_Asyntask.AddTask(&CManageNetWork::ThreadFun_Version_Config, this, (LPARAM)m_base_curl);
  82. }
  83. void CManageNetWork::GetSysConfig()
  84. {
  85. if (!m_base_curl)
  86. {
  87. return;
  88. }
  89. m_Asyntask.AddTask(&CManageNetWork::ThreadFun_Sys_Config, this, (LPARAM)m_base_curl);
  90. }
  91. void CManageNetWork::ThreadFun_login(LPARAM lParam)
  92. {
  93. IBaseCurl* lpAsyncParam = reinterpret_cast<IBaseCurl*>(lParam);
  94. int code = 200;
  95. SStringW msg = L"";
  96. std::string data;
  97. HTTPRET httpstatus = m_base_curl->GetSysConfigFromUser(this->m_username, this->m_password, data);
  98. if (httpstatus == HTTPRET::http_user_expired_at)
  99. {
  100. code = -2;
  101. msg = m_base_curl->GetLastErrorW();
  102. }
  103. else if (httpstatus == HTTPRET::http_user_transfer_enable) {
  104. code = -3;
  105. msg = m_base_curl->GetLastErrorW();
  106. }
  107. else if (httpstatus == HTTPRET::http_f) {
  108. code = 0;
  109. msg = m_base_curl->GetLastErrorW();
  110. }
  111. if (!data.empty())
  112. {
  113. if (!CApp::getSingletonPtr()->GetSysconfig()->Inti(data)) {
  114. }
  115. }
  116. data.empty();
  117. httpstatus = m_base_curl->PostLogin(this->m_username, this->m_password, data);
  118. if (httpstatus == HTTPRET::http_user_expired_at)
  119. {
  120. code = -2;
  121. msg = m_base_curl->GetLastErrorW();
  122. }
  123. else if(httpstatus == HTTPRET::http_user_transfer_enable){
  124. code = -3;
  125. msg = m_base_curl->GetLastErrorW();
  126. }
  127. else if (httpstatus == HTTPRET::http_f) {
  128. code = 0;
  129. msg = m_base_curl->GetLastErrorW();
  130. }
  131. if (!data.empty())
  132. {
  133. if (!CApp::getSingletonPtr()->GetUserinfo()->Init(data))
  134. {
  135. code = -1;
  136. msg = CApp::getSingletonPtr()->GetUserinfo()->GetLastErrorW();
  137. }
  138. }
  139. DataToFile();
  140. EventLogin* pEvt = new EventLogin(nullptr);
  141. pEvt->status = code;
  142. pEvt->msg = msg;
  143. SNotifyCenter::getSingleton().FireEventAsync(pEvt);
  144. pEvt->Release();
  145. }
  146. void CManageNetWork::ThreadFun_Dowlon_Config(LPARAM lParam)
  147. {
  148. IBaseCurl* lpAsyncParam = reinterpret_cast<IBaseCurl*>(lParam);
  149. int code = 200;
  150. SStringW msg = L"";
  151. std::string data;
  152. if (!m_base_curl->Download(CApp::getSingletonPtr()->GetUserinfo()->clash_config)) {
  153. code = 0;
  154. msg = L"下载文件失败";
  155. }
  156. EventDoWNload* pEvt = new EventDoWNload(nullptr);
  157. pEvt->status = code;
  158. pEvt->msg = msg;
  159. SNotifyCenter::getSingleton().FireEventAsync(pEvt);
  160. pEvt->Release();
  161. }
  162. void CManageNetWork::ThreadFun_Sys_Config(LPARAM lParam)
  163. {
  164. IBaseCurl* lpAsyncParam = reinterpret_cast<IBaseCurl*>(lParam);
  165. int code = 200;
  166. SStringW msg = L"";
  167. std::string data;
  168. //if (m_base_curl->Version(data) == HTTPRET::http_f) {
  169. // code = 0;
  170. // msg = m_base_curl->GetLastErrorW();
  171. //}
  172. HTTPRET httpstatus = m_base_curl->GetSysConfig(data);
  173. if (httpstatus == HTTPRET::http_user_expired_at)
  174. {
  175. code = -2;
  176. msg = m_base_curl->GetLastErrorW();
  177. }
  178. else if (httpstatus == HTTPRET::http_user_transfer_enable) {
  179. code = -3;
  180. msg = m_base_curl->GetLastErrorW();
  181. }
  182. else if (httpstatus == HTTPRET::http_f) {
  183. code = 0;
  184. msg = m_base_curl->GetLastErrorW();
  185. }
  186. if (!data.empty())
  187. {
  188. if (!CApp::getSingletonPtr()->GetSysconfig()->Inti(data))
  189. {
  190. code = -1;
  191. msg = CApp::getSingletonPtr()->GetSysconfig()->GetLastErrorW();
  192. }
  193. }
  194. EventSysconfig* pEvt = new EventSysconfig(nullptr);
  195. pEvt->status = code;
  196. pEvt->msg = msg;
  197. SNotifyCenter::getSingleton().FireEventAsync(pEvt);
  198. pEvt->Release();
  199. }
  200. void CManageNetWork::ThreadFun_Version_Config(LPARAM lParam)
  201. {
  202. IBaseCurl* lpAsyncParam = reinterpret_cast<IBaseCurl*>(lParam);
  203. int code = 200;
  204. SStringW msg = L"有新版本,点我升级";
  205. std::string data;
  206. if (m_base_curl->Version(data) == HTTPRET::http_f) {
  207. code = 0;
  208. msg = m_base_curl->GetLastErrorW();
  209. }
  210. if (!data.empty())
  211. {
  212. if (!CApp::getSingletonPtr()->GetVerinfo()->Inti(data))
  213. {
  214. code = -1;
  215. msg = CApp::getSingletonPtr()->GetVerinfo()->GetLastErrorW();
  216. }
  217. }
  218. EventVerions* pEvt = new EventVerions(nullptr);
  219. pEvt->status = code;
  220. pEvt->msg = msg;
  221. SNotifyCenter::getSingleton().FireEventAsync(pEvt);
  222. pEvt->Release();
  223. }
  224. void CManageNetWork::ThreadFun_Node_Config(LPARAM lParam)
  225. {
  226. IBaseCurl* lpAsyncParam = reinterpret_cast<IBaseCurl*>(lParam);
  227. int code = 200;
  228. SStringW msg = L"";
  229. std::string data;
  230. int count = 0;
  231. do
  232. {
  233. data = "";
  234. HTTPRET httpstatus = m_base_curl->GetServerNode(data);
  235. if (httpstatus == HTTPRET::http_f) {
  236. code = 0;
  237. msg = m_base_curl->GetLastErrorW();
  238. }
  239. if (m_base_curl->GetHttpStatus() == 401)
  240. {
  241. if (count >= 3)
  242. {
  243. code = m_base_curl->GetHttpStatus();
  244. msg = L"鉴权失败,需要重新登录";
  245. break;
  246. }
  247. httpstatus = m_base_curl->PostLogin(this->m_username, this->m_password, data);
  248. if (httpstatus == HTTPRET::http_f) {
  249. code = m_base_curl->GetHttpStatus();
  250. msg = m_base_curl->GetLastErrorW();
  251. count++;
  252. }
  253. else {
  254. if (!CApp::getSingletonPtr()->GetUserinfo()->Init(data))
  255. {
  256. code = -1;
  257. msg = CApp::getSingletonPtr()->GetServerList()->GetLastErrorW();
  258. }
  259. continue;
  260. }
  261. }
  262. else {
  263. if (!data.empty())
  264. {
  265. if (!CApp::getSingletonPtr()->GetServerList()->Init(data))
  266. {
  267. code = -1;
  268. msg = CApp::getSingletonPtr()->GetServerList()->GetLastErrorW();
  269. }
  270. break;
  271. }
  272. }
  273. } while (m_base_curl);
  274. EventNodeList* pEvt = new EventNodeList(nullptr);
  275. pEvt->status = code;
  276. pEvt->msg = msg;
  277. SNotifyCenter::getSingleton().FireEventAsync(pEvt);
  278. pEvt->Release();
  279. }
  280. void CManageNetWork::LoadFileToData() {
  281. try
  282. {
  283. FileOperate f;
  284. SStringA paht;
  285. paht.Format("%s\\%s", CApp::getSingletonPtr()->GetDataPath().string().c_str(), S_CW2A(DSPROXY_CONFIG_NAME, CP_UTF8));
  286. if (f.open(paht.GetBuffer(0), std::fstream::in | std::fstream::out | std::fstream::app)) {
  287. std::string data = f.readAll();
  288. if (data.empty())
  289. {
  290. return;
  291. }
  292. nlohmann::json j3 = nlohmann::json::parse(data.begin(), data.end());
  293. this->m_username = j3["username"].get<std::string>().c_str();
  294. this->m_password = j3["password"].get<std::string>().c_str();
  295. }
  296. f.close();
  297. }
  298. CATCH_LOG();
  299. }
  300. void CManageNetWork::DataToFile()
  301. {
  302. try
  303. {
  304. nlohmann::json j3;
  305. j3["username"] = this->m_username;
  306. j3["password"] = this->m_password;
  307. auto str = j3.dump(4);
  308. FileOperate f;
  309. SStringA paht;
  310. paht.Format("%s\\%s", CApp::getSingletonPtr()->GetDataPath().string().c_str(), S_CW2A(DSPROXY_CONFIG_NAME, CP_UTF8));
  311. f.create(paht.GetBuffer(0));
  312. if (f.open(paht.GetBuffer(0), std::fstream::in | std::fstream::out | std::fstream::app)) {
  313. f.write(str);
  314. }
  315. f.close();
  316. }
  317. CATCH_LOG();
  318. }