MainDlg.cpp 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975
  1. // MainDlg.cpp : implementation of the CMainDlg class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "MainDlg.h"
  6. #include "StabtypeControl.h"
  7. #include "CLashConfig.h"
  8. #include "SysProxy.h"
  9. CMainDlg::CMainDlg() : SHostWnd(_T("LAYOUT:XML_MAINWND")), m_base_clash(nullptr), pNodeAdapter(nullptr)
  10. {
  11. m_bLayoutInited = FALSE;
  12. m_refresh = false;
  13. m_connect_mage = nullptr;
  14. }
  15. CMainDlg::~CMainDlg()
  16. {
  17. if (m_base_clash)
  18. {
  19. delete m_base_clash;
  20. m_base_clash = nullptr;
  21. }
  22. if (m_connect_mage)
  23. {
  24. delete m_connect_mage;
  25. m_connect_mage = nullptr;
  26. }
  27. }
  28. int CMainDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
  29. {
  30. SetMsgHandled(FALSE);
  31. return 0;
  32. }
  33. BOOL CMainDlg::OnInitDialog(HWND hWnd, LPARAM lParam)
  34. {
  35. m_bLayoutInited = TRUE;
  36. Init();
  37. OnConnecting_UdateUi(false, CONNECT_NODE_MSG,L"");
  38. /*CManageNetWork m_manageNetwork;
  39. m_manageNetwork.GetNodeList();*/
  40. CManageNetWork::getSingletonPtr()->GetNodeList();
  41. return 0;
  42. }
  43. void CMainDlg::Init()
  44. {
  45. CApp::getSingletonPtr()->SetupDataDirectory();
  46. //FindChildByName2<STabCtrl>(L"tabmain");
  47. if (!m_base_clash)
  48. {
  49. m_base_clash = new CLashConfig();
  50. m_base_clash->InitClash();
  51. m_base_clash->StartClash();
  52. }
  53. if (!m_connect_mage)
  54. {
  55. m_connect_mage = new CConnectMage();
  56. m_connect_mage->SetClashConfig((CLashConfig*)m_base_clash);
  57. m_connect_mage->Init();
  58. }
  59. SysMode list;
  60. list.id = 0;
  61. list.name = L"系统代理";
  62. list.proxy_mode = PROXY_MODE::sys_mode;
  63. SysMode list1;
  64. list1.id = 1;
  65. list1.name = L"网卡代理";
  66. list1.proxy_mode = PROXY_MODE::tun_mode;
  67. m_sysmode_vctor.push_back(list);
  68. m_sysmode_vctor.push_back(list1);
  69. RouteMode route;
  70. route.id = 0;
  71. route.name = L"智能";
  72. route.route_mode = ROUT_MODE::cn_mode;
  73. RouteMode route2;
  74. route2.id = 1;
  75. route2.name = L"全局";
  76. route2.route_mode = ROUT_MODE::qg_mode;
  77. m_route_vctor.push_back(route);
  78. m_route_vctor.push_back(route2);
  79. SSwitch2* modeSys = FindChildByName2<SSwitch2>(L"modeSys");
  80. if (modeSys)
  81. {
  82. if (m_route_vctor.size() > 0)
  83. {
  84. CApp::getSingletonPtr()->SetRouteMode(ROUT_MODE::cn_mode);
  85. }
  86. modeSys->SetOpen(TRUE);
  87. }
  88. StabtypeControl* tabtype = FindChildByName2<StabtypeControl>(L"sysmode");
  89. if (tabtype)
  90. {
  91. for (auto i = 0; i < m_sysmode_vctor.size(); i++)
  92. {
  93. tabtype->ItemCreateChildren(m_sysmode_vctor[i].id, m_sysmode_vctor[i].name,i == 0 ? true : false );
  94. }
  95. if (m_sysmode_vctor.size() > 0)
  96. {
  97. CApp::getSingletonPtr()->SetSysMode(PROXY_MODE::sys_mode);
  98. }
  99. tabtype->GetEventSet()->subscribeEvent(EVT_TABTYPE_CONTROL,
  100. Subscriber(&CMainDlg::OnSysModeType, this));
  101. }
  102. StabtypeControl* routetype = FindChildByName2<StabtypeControl>(L"routemode");
  103. if (routetype)
  104. {
  105. for (auto i = 0; i < m_route_vctor.size(); i++)
  106. {
  107. routetype->ItemCreateChildren(m_route_vctor[i].id, m_route_vctor[i].name, i == 0 ? true : false);
  108. }
  109. if (m_route_vctor.size() > 0)
  110. {
  111. CApp::getSingletonPtr()->SetRouteMode(ROUT_MODE::cn_mode);
  112. }
  113. routetype->GetEventSet()->subscribeEvent(EVT_TABTYPE_CONTROL,
  114. Subscriber(&CMainDlg::OnRouteModeType, this));
  115. }
  116. auto funRecent2 = std::bind(&CMainDlg::ShowView, this, std::placeholders::_1, std::placeholders::_2);
  117. auto funRecent3 = std::bind(&CMainDlg::ItemRClick, this, std::placeholders::_1);
  118. SListView* pTileView = FindChildByName2<SListView>("nodeList");
  119. if (pTileView)
  120. {
  121. /*std::vector<SStringT> vctInfo{ L"Test1",L"Fun1", L"Ming", L"Get" };*/
  122. pNodeAdapter = new CNodeAdapter(pTileView);
  123. pTileView->SetAdapter(pNodeAdapter);
  124. pNodeAdapter->SetShowView(funRecent2);
  125. pNodeAdapter->SetItemClickCallBack(funRecent3);
  126. //pNodeAdapter->Release();
  127. }
  128. UpDateUserInfo();
  129. }
  130. void CMainDlg::OnNode()
  131. {
  132. STabCtrl* m_tab_main = FindChildByName2<STabCtrl>(L"tabmain");
  133. if (m_tab_main)
  134. {
  135. m_tab_main->SetCurSel(1);
  136. m_tab_main->Invalidate();
  137. }
  138. }
  139. void CMainDlg::OnBackNode()
  140. {
  141. STabCtrl* m_tab_main = FindChildByName2<STabCtrl>(L"tabmain");
  142. if (m_tab_main)
  143. {
  144. m_tab_main->SetCurSel(0);
  145. m_tab_main->Invalidate();
  146. }
  147. }
  148. bool CMainDlg::OnSysModeType(SOUI::EventArgs* pEvt)
  149. {
  150. SOUI::EventTabtypeControl* pTestControlEvent =
  151. SOUI::sobj_cast<SOUI::EventTabtypeControl>(pEvt);
  152. if (!pTestControlEvent)
  153. {
  154. return false;
  155. }
  156. CApp::getSingletonPtr()->SetSysMode(m_sysmode_vctor[pTestControlEvent->nIndex].proxy_mode);
  157. return true;
  158. }
  159. bool CMainDlg::OnRouteModeType(SOUI::EventArgs* pEvt)
  160. {
  161. SOUI::EventTabtypeControl* pTestControlEvent =
  162. SOUI::sobj_cast<SOUI::EventTabtypeControl>(pEvt);
  163. if (!pTestControlEvent)
  164. {
  165. return false;
  166. }
  167. CApp::getSingletonPtr()->SetRouteMode(m_route_vctor[pTestControlEvent->nIndex].route_mode);
  168. /*if (m_connect_mage)
  169. {
  170. m_connect_mage->ReqConfig();
  171. }*/
  172. if (m_connect_mage)
  173. {
  174. m_connect_mage->ChangeClashProxyMode();
  175. }
  176. SStringW msg;
  177. if (CApp::getSingletonPtr()->GetRouteMode() == ROUT_MODE::cn_mode)
  178. {
  179. msg.Format(L"路由模式智能");
  180. }
  181. else {
  182. msg.Format(L"路由模式全局");
  183. }
  184. OnConnecting_UdateUi(false, msg, L"", false);
  185. return true;
  186. }
  187. void CMainDlg::OnAuthFinish(SOUI::EventArgs* pEvt)
  188. {
  189. EventAUTH* e2 = sobj_cast<EventAUTH>(pEvt);
  190. if (!e2)
  191. {
  192. return;
  193. }
  194. if (e2->status != 200)
  195. {
  196. OnConnecting_UdateUi(TRUE, L"未连接");
  197. SMessageBox(m_hWnd, e2->msg, L"提醒", 0);
  198. }
  199. else
  200. {
  201. OnConnect();
  202. }
  203. }
  204. void CMainDlg::OnServerListFinish(SOUI::EventArgs* pEvt)
  205. {
  206. EventNodeList* e2 = sobj_cast<EventNodeList>(pEvt);
  207. if (!e2)
  208. {
  209. return;
  210. }
  211. if (e2->status != 200 )
  212. {
  213. if (m_refresh)
  214. {
  215. SStatic* refresh_status = FindChildByName2<SStatic>(L"refresh_status");
  216. if (refresh_status)
  217. {
  218. refresh_status->SetWindowTextW(e2->msg);
  219. refresh_status->Invalidate();
  220. }
  221. SStatic* text_touch = FindChildByName2<SStatic>(L"text_touch");
  222. if (text_touch)
  223. {
  224. text_touch->SetWindowTextW(e2->msg);
  225. text_touch->Invalidate();
  226. }
  227. OnConnecting_UdateUi(TRUE, e2->msg);
  228. m_refresh = false;
  229. }
  230. else {
  231. UPdateMsgStatus(e2->msg);
  232. OnConnecting_UdateUi(TRUE, e2->msg);
  233. }
  234. }
  235. else if (e2->status == 200)
  236. {
  237. if (m_refresh)
  238. {
  239. SStatic* refresh_status = FindChildByName2<SStatic>(L"refresh_status");
  240. if (refresh_status)
  241. {
  242. refresh_status->SetWindowTextW(L"更新完成..");
  243. refresh_status->Invalidate();
  244. }
  245. SStatic* text_touch = FindChildByName2<SStatic>(L"text_touch");
  246. if (text_touch)
  247. {
  248. text_touch->SetWindowTextW(L"更新完成...");
  249. text_touch->Invalidate();
  250. }
  251. m_refresh = false;
  252. }
  253. else {
  254. OnConnecting_UdateUi(TRUE, SUEECS_NODE_MSG);
  255. CManageNetWork::getSingletonPtr()->GetVersion();
  256. }
  257. if (m_connect_mage)
  258. {
  259. m_connect_mage->ReqConfig();
  260. }
  261. //更新 节点数据
  262. if (pNodeAdapter)
  263. {
  264. pNodeAdapter->SetCount(CApp::getSingletonPtr()->GetServerList()->vectlistmode.size());
  265. }
  266. }
  267. }
  268. void CMainDlg::OnVersionFinish(SOUI::EventArgs* pEvt)
  269. {
  270. EventVerions* e2 = sobj_cast<EventVerions>(pEvt);
  271. if (!e2)
  272. {
  273. return;
  274. }
  275. if (e2->status == 200)
  276. {
  277. UPdateVersionMsgStatus(e2->msg, S_CA2W(CApp::getSingletonPtr()->GetVerinfo()->appdownload.c_str()),e2->versionupdate);
  278. }
  279. else {
  280. UPdateVersionMsgStatus(e2->msg);
  281. }
  282. }
  283. void CMainDlg::OnConnectFinish(SOUI::EventArgs* pEvt)
  284. {
  285. EventConnect* e2 = sobj_cast<EventConnect>(pEvt);
  286. if (!e2)
  287. {
  288. return;
  289. }
  290. if (e2->status == ConnectState::Stop)
  291. {
  292. OnConnecting_UdateUi(true, e2->msg, L"", false);
  293. OnUpdataNodeName();
  294. } else if (e2->status == ConnectState::SwitchConfigSuccEss)
  295. {
  296. OnConnecting_UdateUi(true, e2->msg, L"", true);
  297. OnUpdataNodeName();
  298. } else if (e2->status == ConnectState::SwitchNodeSuccEss)
  299. {
  300. OnConnecting_UdateUi(true, e2->msg, L"", true);
  301. OnUpdataNodeName();
  302. }
  303. }
  304. void CMainDlg::OnClashPreoceeQutFinish(SOUI::EventArgs* pEvt)
  305. {
  306. if (m_base_clash)
  307. {
  308. m_base_clash->StartClash();
  309. }
  310. if (m_connect_mage)
  311. {
  312. m_connect_mage->ReqConfig();
  313. }
  314. }
  315. void CMainDlg::UPdateMsgStatus(SStringW msg)
  316. {
  317. //text_touch
  318. SStatic* text_touch = FindChildByName2<SStatic>(L"text_touch");
  319. if (text_touch)
  320. {
  321. text_touch->SetWindowTextW(msg);
  322. text_touch->EnableWindow(FALSE);
  323. text_touch->Invalidate();
  324. }
  325. }
  326. void CMainDlg::UPdateVersionMsgStatus(SStringW msg, SStringW url,int appversionupdate)
  327. {
  328. SLink* app_version = FindChildByName2<SLink>(L"app_version");
  329. if (app_version)
  330. {
  331. if (!url.IsEmpty())
  332. {
  333. app_version->SetAttribute(L"href", url);
  334. }
  335. if (appversionupdate == 1)
  336. {
  337. app_version->SetWindowTextW(L"有更新,点击升级");
  338. }
  339. else {
  340. app_version->SetWindowTextW(SStringW().Format(L"版本:%s", VERSION));
  341. }
  342. app_version->EnableWindow(true);
  343. app_version->Invalidate();
  344. }
  345. if (appversionupdate == 1)
  346. {
  347. SMessageBox(m_hWnd, msg, L"更新提示", 0);
  348. ::ShellExecute(NULL, _T("open"), url, NULL, NULL, SW_SHOWNORMAL);
  349. }
  350. }
  351. void CMainDlg::UpDateUserInfo()
  352. {
  353. CUserInfo* userinfo = CApp::getSingletonPtr()->GetUserinfo();
  354. if (!userinfo)
  355. {
  356. return;
  357. }
  358. SStatic* username = FindChildByName2<SStatic>(L"username");
  359. if (username)
  360. {
  361. SStringW enable = L"禁用";
  362. if (CApp::getSingletonPtr()->GetUserinfo()->enable == true)
  363. {
  364. enable = L"启用" ;
  365. }
  366. else {
  367. enable = L"禁用";
  368. }
  369. username->SetWindowTextW(SStringW().Format(L"%s", S_CA2W(userinfo->username.c_str())));
  370. username->EnableWindow(FALSE);
  371. username->Invalidate();
  372. }
  373. SStatic* usernametc = FindChildByName2<SStatic>(L"usernametc");
  374. if (usernametc)
  375. {
  376. usernametc->SetWindowTextW(SStringW().Format(L"%s", S_CA2W(userinfo->planName.c_str(),CP_UTF8)));
  377. usernametc->EnableWindow(FALSE);
  378. usernametc->Invalidate();
  379. }
  380. SStatic* username_time = FindChildByName2<SStatic>(L"username_time");
  381. if (username_time)
  382. {
  383. username_time->SetWindowTextW(SStringW().Format(L"到期时间:%s", S_CA2W(userinfo->expiretime.c_str())));
  384. username_time->EnableWindow(FALSE);
  385. username_time->Invalidate();
  386. }
  387. SStatic* username_liulaing = FindChildByName2<SStatic>(L"username_liulaing");
  388. if (username_liulaing)
  389. {
  390. username_liulaing->SetWindowTextW(SStringW().Format(L"%s", S_CA2W(userinfo->unusedTraffic.c_str(),CP_UTF8)));
  391. username_liulaing->EnableWindow(FALSE);
  392. username_liulaing->Invalidate();
  393. }
  394. SLink* username_jiaocheng = FindChildByName2<SLink>(L"username_jiaocheng");
  395. if (username_jiaocheng)
  396. {
  397. username_jiaocheng->SetAttribute(L"href", CApp::getSingletonPtr()->GetSysconfig()->GetLoginHomeLink());
  398. username_jiaocheng->EnableWindow(true);
  399. username_jiaocheng->Invalidate();
  400. }
  401. SLink* username_home = FindChildByName2<SLink>(L"username_home");
  402. if (username_home)
  403. {
  404. username_home->SetAttribute(L"href", CApp::getSingletonPtr()->GetSysconfig()->GetLoginHomeLink());
  405. username_home->EnableWindow(true);
  406. username_home->Invalidate();
  407. }
  408. SLink* username_chongzhi = FindChildByName2<SLink>(L"username_chongzhi");
  409. if (username_chongzhi)
  410. {
  411. username_chongzhi->SetAttribute(L"href", CApp::getSingletonPtr()->GetSysconfig()->GetLoginHomeLink());
  412. username_chongzhi->EnableWindow(true);
  413. username_chongzhi->Invalidate();
  414. }
  415. SLink* username_tuiguang = FindChildByName2<SLink>(L"username_tuiguang");
  416. if (username_tuiguang)
  417. {
  418. username_tuiguang->SetAttribute(L"href", CApp::getSingletonPtr()->GetSysconfig()->GetAffLink());
  419. username_tuiguang->EnableWindow(true);
  420. username_tuiguang->Invalidate();
  421. }
  422. SLink* username_online_kf = FindChildByName2<SLink>(L"username_online_kf");
  423. if (username_online_kf)
  424. {
  425. username_online_kf->SetAttribute(L"href", CApp::getSingletonPtr()->GetSysconfig()->GetLoginHomeLink());
  426. username_online_kf->EnableWindow(true);
  427. username_online_kf->Invalidate();
  428. }
  429. if (m_base_clash)
  430. {
  431. auto http_prot = m_base_clash->GetHttpPort();
  432. auto sock_prot = m_base_clash->GetSocketPort();
  433. SStatic* httpproxy = FindChildByName2<SStatic>(L"httpproxy");
  434. if (httpproxy)
  435. {
  436. httpproxy->SetWindowTextW(SStringW().Format(L"http proxy 127.0.0.1:%d", http_prot));
  437. httpproxy->EnableWindow(FALSE);
  438. httpproxy->Invalidate();
  439. }
  440. SStatic* socksproxy = FindChildByName2<SStatic>(L"socksproxy");
  441. if (socksproxy)
  442. {
  443. socksproxy->SetWindowTextW(SStringW().Format(L"socks proxy 127.0.0.1:%d", sock_prot));
  444. socksproxy->EnableWindow(FALSE);
  445. socksproxy->Invalidate();
  446. }
  447. }
  448. }
  449. void CMainDlg::ShowView(int nItem, SWindow* pItem)
  450. {
  451. if (!pNodeAdapter)
  452. {
  453. return;
  454. }
  455. CServerList* p = CApp::getSingletonPtr()->GetServerList();
  456. if (!p)
  457. {
  458. return;
  459. }
  460. auto vectorserverlist = p->vectlistmode;
  461. /*if (CApp::getSingletonPtr()->GetSelectNodeById() == vectorserverlist[nItem].created_at)
  462. {
  463. pItem->SetCheck(TRUE);
  464. }
  465. else {
  466. pItem->SetCheck(FALSE);
  467. }*/
  468. SStatic* servername = pItem->FindChildByName2<SStatic>(L"servername");
  469. if (servername)
  470. {
  471. servername->SetWindowTextW(S_CA2W(vectorserverlist[nItem].name.c_str(),CP_UTF8));
  472. }
  473. SStatic* type_node = pItem->FindChildByName2<SStatic>(L"type_node");
  474. if (type_node)
  475. {
  476. type_node->SetWindowTextW(S_CA2W(vectorserverlist[nItem].type.c_str(), CP_UTF8));
  477. }
  478. SStatic* node_rate = pItem->FindChildByName2<SStatic>(L"node_rate");
  479. if (node_rate)
  480. {
  481. node_rate->SetWindowTextW(SStringW().Format(L"倍数%s", S_CA2W(vectorserverlist[nItem].rate.c_str(), CP_UTF8)));
  482. }
  483. SStatic* node_tag = pItem->FindChildByName2<SStatic>(L"node_tag");
  484. if (node_tag)
  485. {
  486. SStringW tags;
  487. for each (std::string v in vectorserverlist[nItem].tags)
  488. {
  489. tags.Append(S_CA2W(v.c_str(),CP_UTF8));
  490. tags.Append(L" ");
  491. }
  492. node_tag->SetWindowTextW(tags);
  493. }
  494. SStatic* serverms = pItem->FindChildByName2<SStatic>(L"serverms");
  495. if (serverms)
  496. {
  497. SStringW msg = L"";
  498. SStringW color = L"";
  499. //SLOG_DEBUG(vectorserverlist[nItem].online_users);
  500. //if(vectorserverlist[nItem].online_users < 29) { //空闲
  501. // msg = L"空闲";
  502. // color = L"#6aa84f";
  503. //}
  504. //else if (vectorserverlist[nItem].online_users > 30 && vectorserverlist[nItem].online_users < 150) {
  505. // msg = L"正常";
  506. // color = L"#6aa84f";
  507. //}
  508. //else if (vectorserverlist[nItem].online_users > 151 && vectorserverlist[nItem].online_users < 200) {
  509. // msg = L"繁忙";
  510. // color = L"#7c7c7c";
  511. //}
  512. //else if (vectorserverlist[nItem].online_users > 201 && vectorserverlist[nItem].online_users < 500){
  513. // msg = L"拥挤";
  514. // color = L"#696969";
  515. //}
  516. //else {
  517. // msg = L"维护";
  518. // color = L"#696969";
  519. //}
  520. serverms->SetWindowTextW(msg);
  521. serverms->SetAttribute(L"colorText", color);
  522. }
  523. }
  524. void CMainDlg::ItemRClick(int nItem)
  525. {
  526. CServerList* p = CApp::getSingletonPtr()->GetServerList();
  527. if (!p)
  528. {
  529. return;
  530. }
  531. auto vectorserverlist = p->vectlistmode;
  532. auto name = vectorserverlist[nItem].name;
  533. //CApp::getSingletonPtr()->SetSelectNodeById(vectorserverlist[nItem].created_at);
  534. OnBackNode();
  535. SLOG_DEBUG(name.c_str());
  536. //切换CLash api
  537. if (m_connect_mage)
  538. {
  539. m_connect_mage->SetNodeName(name);
  540. m_connect_mage->ChangeClashNode();
  541. }
  542. CApp::getSingletonPtr()->SetSelect_node(name);
  543. OnUpdataNodeName();
  544. }
  545. void CMainDlg::OnRefresh()
  546. {
  547. if (m_refresh)
  548. {
  549. return;
  550. }
  551. //更新 节点数据
  552. if (pNodeAdapter)
  553. {
  554. pNodeAdapter->SetCount(0);
  555. }
  556. CManageNetWork::getSingletonPtr()->GetNodeList();
  557. m_refresh = true;
  558. //refresh_status
  559. SStatic* refresh_status = FindChildByName2<SStatic>(L"refresh_status");
  560. if (refresh_status)
  561. {
  562. refresh_status->SetWindowTextW(L"正在刷新节点...");
  563. refresh_status->Invalidate();
  564. }
  565. SStatic* text_touch = FindChildByName2<SStatic>(L"text_touch");
  566. if (text_touch)
  567. {
  568. text_touch->SetWindowTextW(L"正在刷新节点...");
  569. text_touch->Invalidate();
  570. }
  571. }
  572. void CMainDlg::OnConnect()
  573. {
  574. if (!m_connect_mage)
  575. {
  576. return;
  577. }
  578. if (m_connect_mage->GetConnectStatus() == ConnectState::Stop)
  579. {
  580. m_connect_mage->ReqConfig();
  581. OnConnecting_UdateUi(false, L"正在启动中..", L"", false);
  582. }
  583. else {
  584. m_connect_mage->Stop();
  585. DisableSystemProxy();
  586. OnConnecting_UdateUi(true, L"停止成功", L"", false);
  587. }
  588. }
  589. void CMainDlg::OnAuth()
  590. {
  591. if (m_connect_mage->GetConnectStatus() == ConnectState::Stop) {
  592. OnConnecting_UdateUi(false, L"正在验证中..", L"", false);
  593. CManageNetWork::getSingletonPtr()->Auth();
  594. }
  595. else {
  596. OnConnect();
  597. }
  598. }
  599. void CMainDlg::OnUpdataNodeName(SStringW nodename)
  600. {
  601. SStatic* node_name = FindChildByName2<SStatic>(L"node_name");
  602. if (node_name)
  603. {
  604. if (nodename.IsEmpty())
  605. {
  606. if (!CApp::getSingletonPtr()->GetSelect_node().empty())
  607. {
  608. node_name->SetWindowTextW(S_CA2W(CApp::getSingletonPtr()->GetSelect_node().c_str(), CP_UTF8));
  609. }
  610. else {
  611. if (!CApp::getSingletonPtr()->GetServerList()->node_name.empty());
  612. {
  613. node_name->SetWindowTextW(S_CA2W(CApp::getSingletonPtr()->GetServerList()->node_name.c_str(), CP_UTF8));
  614. }
  615. }
  616. }
  617. else {
  618. //node_name->SetWindowTextW(nodename);
  619. }
  620. node_name->Invalidate();
  621. }
  622. }
  623. void CMainDlg::OnSWitchSys()
  624. {
  625. SSwitch2* switchsys = FindChildByName2<SSwitch2>(L"switchSys");
  626. if (!m_connect_mage)
  627. {
  628. return;
  629. }
  630. if (CApp::getSingletonPtr()->GetSelect_node().empty())
  631. {
  632. if (switchsys)
  633. {
  634. switchsys->SetOpen(!switchsys->IsOpen());
  635. }
  636. SMessageBox(m_hWnd, L"选择节点才能链接", L"提示", 0);
  637. return;
  638. }
  639. if (switchsys)
  640. {
  641. if (!switchsys->IsOpen())
  642. {
  643. BOOL ook = m_connect_mage->setProxy();
  644. OnConnecting_UdateUi(false, ook == TRUE ? L"设置系统代理成功.." : L"设置系统代理失败", L"", false);
  645. }
  646. else {
  647. //m_connect_mage->Stop();
  648. BOOL iok = DisableSystemProxy();
  649. OnConnecting_UdateUi(true, iok == TRUE ? L"关闭系统代理成功" : L"关闭系统代理失败", L"", false);
  650. }
  651. }
  652. }
  653. void CMainDlg::OnSWitchTUN()
  654. {
  655. SSwitch2* switchtun = FindChildByName2<SSwitch2>(L"switchTun");
  656. if (!m_connect_mage)
  657. {
  658. return;
  659. }
  660. if (CApp::getSingletonPtr()->GetSelect_node().empty())
  661. {
  662. if (switchtun)
  663. {
  664. switchtun->SetOpen(!switchtun->IsOpen());
  665. }
  666. SMessageBox(m_hWnd, L"选择节点才能链接", L"提示", 0);
  667. return;
  668. }
  669. if (switchtun)
  670. {
  671. if (!switchtun->IsOpen())
  672. {
  673. CApp::getSingletonPtr()->SetSysMode(PROXY_MODE::tun_mode);
  674. m_connect_mage->ReqConfig();
  675. OnConnecting_UdateUi(false, L"网卡模式启动成功", L"", false);
  676. }
  677. else {
  678. SSwitch2* switchsys = FindChildByName2<SSwitch2>(L"switchSys");
  679. if (switchsys)
  680. {
  681. if (switchsys->IsOpen())
  682. {
  683. CApp::getSingletonPtr()->SetSysMode(PROXY_MODE::sys_mode);
  684. m_connect_mage->ReqConfig();
  685. OnConnecting_UdateUi(true, L"网卡模式停止,系统模式正在运行..切换系统模式", L"", false);
  686. }
  687. else {
  688. CApp::getSingletonPtr()->SetSysMode(PROXY_MODE::sys_mode);
  689. m_connect_mage->ReqConfig();
  690. OnConnecting_UdateUi(true, L"网卡模式停止", L"", false);
  691. }
  692. }
  693. }
  694. }
  695. }
  696. void CMainDlg::OnSWitchModeSys()
  697. {
  698. SSwitch2* modeSys = FindChildByName2<SSwitch2>(L"modeSys");
  699. SSwitch2* modeGG = FindChildByName2<SSwitch2>(L"modeGG");
  700. if (!modeSys || !modeGG) {
  701. return;
  702. }
  703. CApp::getSingletonPtr()->SetRouteMode(ROUT_MODE::cn_mode);
  704. if (modeGG->IsOpen())
  705. {
  706. if (modeSys)
  707. {
  708. modeSys->SetOpen(!modeSys->IsOpen());
  709. }
  710. //SMessageBox(m_hWnd, L"选择节点才能链接", L"提示", 0);
  711. return;
  712. }
  713. else {
  714. if (modeSys)
  715. {
  716. modeSys->SetOpen(modeSys->IsOpen());
  717. }
  718. //SMessageBox(m_hWnd, L"选择节点才能链接", L"提示", 0);
  719. return;
  720. }
  721. /*if (modeSys->IsOpen())
  722. {
  723. modeSys->SetOpen(!modeSys->IsOpen());
  724. modeSys->Invalidate();
  725. }
  726. else {
  727. modeSys->SetOpen(!modeGG->IsOpen());
  728. }
  729. */
  730. }
  731. void CMainDlg::OnSWitchModeTUN()
  732. {
  733. SSwitch2* modeSys = FindChildByName2<SSwitch2>(L"modeSys");
  734. SSwitch2* modeGG = FindChildByName2<SSwitch2>(L"modeGG");
  735. if (!modeSys || !modeGG) {
  736. return;
  737. }
  738. if (modeGG->IsOpen())
  739. {
  740. CApp::getSingletonPtr()->SetRouteMode(ROUT_MODE::qg_mode);
  741. }
  742. modeGG->SetOpen(!modeSys->IsOpen());
  743. }
  744. //连接状态 更新UI
  745. void CMainDlg::OnConnecting_UdateUi(bool b,SStringW msg,SStringW acc_msg,bool connect)
  746. {
  747. SWindow* selectnode = FindChildByName2<SWindow>(L"selectnode");
  748. if (selectnode)
  749. {
  750. selectnode->EnableWindow(b);
  751. selectnode->Invalidate();
  752. }
  753. SImageButton* Refresh = FindChildByName2<SImageButton>(L"OnRefresh");
  754. if (Refresh)
  755. {
  756. Refresh->EnableWindow(b);
  757. Refresh->Invalidate();
  758. }
  759. SStatic* text_touch = FindChildByName2<SStatic>(L"text_touch");
  760. if (text_touch)
  761. {
  762. text_touch->SetWindowTextW(msg);
  763. text_touch->EnableWindow(b);
  764. text_touch->Invalidate();
  765. }
  766. SImageButton* connect_touch = FindChildByName2<SImageButton>(L"connect_touch");
  767. if (connect_touch)
  768. {
  769. if (connect)
  770. {
  771. connect_touch->SetAttribute(L"skin", L"skin_btnswitchon");
  772. }
  773. else {
  774. connect_touch->SetAttribute(L"skin", L"skin_btnswitchoff");
  775. }
  776. connect_touch->EnableWindow(b);
  777. connect_touch->Invalidate();
  778. }
  779. }
  780. //TODO:消息映射
  781. void CMainDlg::OnClose()
  782. {
  783. ShowWindow(SW_HIDE);
  784. }
  785. void CMainDlg::OnMaximize()
  786. {
  787. SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE);
  788. }
  789. void CMainDlg::OnRestore()
  790. {
  791. SendMessage(WM_SYSCOMMAND, SC_RESTORE);
  792. }
  793. void CMainDlg::OnMinimize()
  794. {
  795. SendMessage(WM_SYSCOMMAND, SC_MINIMIZE);
  796. }
  797. void ShowConsoleWindow(bool show) {
  798. const HWND hWnd = CProcessManager::getSingletonPtr()->GetConsoleWindow();
  799. if (hWnd)
  800. {
  801. ShowWindow(hWnd, show ? SW_SHOW : SW_HIDE);
  802. if (show)
  803. SetForegroundWindow(hWnd);
  804. }
  805. }
  806. void CMainDlg::OnCommand(UINT uNotifyCode, int nID, HWND wndCtl) {
  807. if (uNotifyCode == 0)
  808. {
  809. if (nID == 2)
  810. {
  811. const HWND hWndConsole = CProcessManager::getSingletonPtr()->GetConsoleWindow();
  812. if (hWndConsole)
  813. {
  814. ShowConsoleWindow(!::IsWindowVisible(hWndConsole));
  815. }
  816. else
  817. ShowConsoleWindow(false);
  818. }
  819. else if (nID == 6) {
  820. if (m_refresh)
  821. {
  822. SMessageBox(m_hWnd, L"正在刷新,无法退出", L"提示", 0);
  823. }
  824. else {
  825. if (m_base_clash)
  826. {
  827. DisableSystemProxy();
  828. CProcessManager::getSingletonPtr()->SendStopSignal();
  829. WaitForSingleObject(CProcessManager::getSingletonPtr()->GetClashProcessInfo().hProcess, 3000);
  830. CProcessManager::getSingletonPtr()->Stop();
  831. m_base_clash->StopClash();
  832. delete m_base_clash;
  833. m_base_clash = nullptr;
  834. }
  835. CSimpleWnd::DestroyWindow();
  836. }
  837. }
  838. }
  839. }