123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- #include "stdafx.h"
- #include "CConnectMage.h"
- CConnectMage::CConnectMage() : m_clash_Api(nullptr), m_clash_config(nullptr), m_connect_status(ConnectState::Stop), m_Asyntask(4)
- {
- SNotifyCenter::getSingleton().addEvent(EVENTID(EventConnect));
- m_isclash_config = false;
- }
- CConnectMage::~CConnectMage()
- {
- if (m_clash_Api)
- {
- delete m_clash_Api;
- m_clash_Api = nullptr;
- }
- }
- BOOL CConnectMage::setProxy()
- {
- BOOL isok = FALSE;
- if (m_clash_config)
- {
- isok = m_clash_config->SetProxy();
- }
- return isok;
- }
- void CConnectMage::Stop()
- {
- m_connect_status = ConnectState::Stop;
- m_Asyntask.AddTask(&CConnectMage::ThreadFun_ChangeClash_Stop, this, (LPARAM)nullptr);
- }
- void CConnectMage::ReqConfig()
- {
- m_Asyntask.AddTask(&CConnectMage::ThreadFun_ChangeClash_Config, this, (LPARAM)nullptr);
- }
- void CConnectMage::ChangeClashNode()
- {
- m_Asyntask.AddTask(&CConnectMage::ThreadFun_ChangeClash_Node, this, (LPARAM)nullptr);
- }
- void CConnectMage::ChangeClashProxyMode()
- {
- m_Asyntask.AddTask(&CConnectMage::ThreadFun_ChangeClash_ProxyMode, this, (LPARAM)nullptr);
- }
- void CConnectMage::ChangeClashInit()
- {
- }
- void CConnectMage::Init()
- {
- if (!m_clash_Api)
- {
- m_clash_Api = new ClashApi();
- m_clash_Api->SetProt(m_clash_config->GetClasApiPort());
- }
- }
- void CConnectMage::SetNodeName(std::string name)
- {
- m_name = name;
- }
- void CConnectMage::SetClashConfig(CLashConfig* m)
- {
- m_clash_config = m;
- }
- ConnectState CConnectMage::GetConnectStatus()
- {
- return m_connect_status;
- }
- void CConnectMage::ThreadFun_ChangeClash_Config(LPARAM lParam)
- {
- if (!CApp::getSingletonPtr()->GetClashRuning())
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"内核没有启动,重启电脑或者软件";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
-
- if (m_clash_config == nullptr || m_clash_Api == nullptr)
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"错误,重启电脑";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
- //创建配置
- if (!m_clash_config->MakeClash())
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"没有生成配置,检查系统是否有管理员";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
- /*std::filesystem::path config;
- if (m_connect_status == ConnectState::Stop && CApp::getSingletonPtr()->GetSysMode() == PROXY_MODE::tun_mode)
- {
- config = CApp::getSingletonPtr()->GetConfigPath() / DSPROXY_CONFIG_INIT_ClASH_NAME;
- }*/
-
- //切换请求
- if (m_clash_Api->RequestConfigUpdate(m_clash_config->GetRunConfig()))
- {
- m_isclash_config = true;
- m_connect_status = ConnectState::SwitchNodeSuccEss;
- m_error = L"加载配置成功";
- //if (m_name.empty())
- //{
- // m_connect_status = ConnectState::SwitchNodeSuccEss;
- // m_error = L"加载配置成功";
- // //m_clash_config->SetProxy();
- // //CServerList* serverlist = CApp::getSingletonPtr()->GetServerList();
- // //if (serverlist)
- // //{
- // // serverlist->MinimumSelectNode();
- // // if (!serverlist->node_name.empty())
- // // {
- // // if (m_clash_Api->UpdateProxyGroup("Proxy", serverlist->node_name))
- // // {
- // // m_connect_status = ConnectState::SwitchNodeSuccEss;
- // // m_error = L"切换成功";
- // // //m_clash_config->SetProxy();
- // // }
- // // else {
- // // m_connect_status = ConnectState::Stop;
- // // m_error = L"切换失败,可以重新尝试";
- // // }
- // // }
- // //}
- //}
- //else {
- // //if (CApp::getSingletonPtr()->GetRouteMode() == ROUT_MODE::cn_mode)
- // //{
- // // if (m_clash_Api->UpdateProxyGroup("Rule", m_name))
- // // {
- // // m_connect_status = ConnectState::SwitchNodeSuccEss;
- // // m_error = L"切换节点成功";
- // // //m_clash_config->SetProxy();
- // // }
- // // else {
- // // m_connect_status = ConnectState::Stop;
- // // m_error = L"切换节点失败,可以重新尝试";
- // // }
- // //}
- // //else {
- // // if (m_clash_Api->UpdateProxyGroup("Global", m_name))
- // // {
- // // m_connect_status = ConnectState::SwitchNodeSuccEss;
- // // m_error = L"切换节点成功";
- // // //m_clash_config->SetProxy();
- // // }
- // // else {
- // // m_connect_status = ConnectState::Stop;
- // // m_error = L"切换节点失败,可以重新尝试";
- // // }
- // //}
- // /*if (m_clash_Api->UpdateProxyGroup("Proxy", m_name))
- // {
- // m_connect_status = ConnectState::SwitchNodeSuccEss;
- // m_error = L"切换成功";
- // m_clash_config->SetProxy();
- // }
- // else {
- // m_connect_status = ConnectState::Stop;
- // m_error = L"切换失败,可以重新尝试";
- // }*/
- // m_connect_status = ConnectState::SwitchNodeSuccEss;
- // m_error = L"加载配置失败";
- //}
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换失败,可以重新尝试";
- }
-
-
-
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- }
- void CConnectMage::ThreadFun_ChangeClash_ProxyMode(LPARAM lParam)
- {
- if (m_clash_config == nullptr || m_clash_Api == nullptr)
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"错误,重启电脑";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
- ClashProxyMode modes;
- if (CApp::getSingletonPtr()->GetRouteMode() == ROUT_MODE::cn_mode)
- {
-
- modes = ClashProxyMode::Rule;
- }
- else {
-
- modes = ClashProxyMode::Global;
- }
- if (m_clash_Api->UpdateProxyMode(modes))
- {
- m_connect_status = ConnectState::SwitchNodeSuccEss;
-
- if (CApp::getSingletonPtr()->GetRouteMode() == ROUT_MODE::cn_mode)
- {
- if (m_clash_Api->UpdateProxyGroup("Proxy", m_name))
- {
- m_connect_status = ConnectState::SwitchNodeSuccEss;
- m_error = L"切换成功..模式成功";
- //m_clash_config->SetProxy();
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换节点失败,可以重新尝试";
- }
- }
- else {
-
- if (m_clash_Api->UpdateProxyGroup("GLOBAL", m_name))
- {
- m_connect_status = ConnectState::SwitchNodeSuccEss;
- m_error = L"切换成功..模式成功";
- //m_clash_config->SetProxy();
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换节点失败,可以重新尝试";
- }
- }
- //m_clash_config->SetProxy();
-
- //ClashConfig clash_config = m_clash_Api->GetConfig();
- //m_error = L"获取配置";
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换成功..模式失败";
- }
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- }
- void CConnectMage::ThreadFun_ChangeClash_Node(LPARAM lParam)
- {
- if (m_clash_config == nullptr || m_clash_Api == nullptr)
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"错误,重启电脑";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
-
- if (m_clash_Api->UpdateProxyGroup("Proxy", m_name))
- {
- m_connect_status = ConnectState::SwitchNodeSuccEss;
- m_error = L"切换成功..点击断开";
- //m_clash_config->SetProxy();
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换失败,可以重新尝试";
- }
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- }
- void CConnectMage::ThreadFun_ChangeClash_Stop(LPARAM lParam)
- {
- if (!CApp::getSingletonPtr()->GetClashRuning())
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"内核没有启动,重启电脑或者软件";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
- if (m_clash_config == nullptr || m_clash_Api == nullptr)
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"错误,重启电脑";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
- //创建配置
- if (!m_clash_config->MakeClash())
- {
- m_connect_status = ConnectState::Stop;
- m_error = L"没有生成配置,检查系统是否有管理员";
- EventConnect* pEvt = new EventConnect(nullptr);
- pEvt->status = m_connect_status;
- pEvt->msg = m_error;
- SNotifyCenter::getSingleton().FireEventAsync(pEvt);
- pEvt->Release();
- return;
- }
- /*std::filesystem::path config;
- if (m_connect_status == ConnectState::Stop && CApp::getSingletonPtr()->GetSysMode() == PROXY_MODE::tun_mode)
- {
- config = CApp::getSingletonPtr()->GetConfigPath() / DSPROXY_CONFIG_INIT_ClASH_NAME;
- }*/
- //切换请求
- if (m_clash_Api->RequestConfigUpdate(CApp::getSingletonPtr()->GetConfigPath() / DSPROXY_CONFIG_INIT_ClASH_NAME))
- {
- m_isclash_config = true;
- if (m_name.empty())
- {
- CServerList* serverlist = CApp::getSingletonPtr()->GetServerList();
- if (serverlist)
- {
- serverlist->MinimumSelectNode();
- if (!serverlist->node_name.empty())
- {
- if (m_clash_Api->UpdateProxyGroup("Proxy", serverlist->node_name))
- {
- m_connect_status = ConnectState::SwitchNodeSuccEss;
- m_error = L"切换成功";
- //m_clash_config->SetProxy();
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换失败,可以重新尝试";
- }
- }
- }
- }
- else {
- if (m_clash_Api->UpdateProxyGroup("Proxy", m_name))
- {
- m_connect_status = ConnectState::SwitchNodeSuccEss;
- m_error = L"切换成功";
- //m_clash_config->SetProxy();
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换失败,可以重新尝试";
- }
- }
- }
- else {
- m_connect_status = ConnectState::Stop;
- m_error = L"切换失败,可以重新尝试";
- }
- }
|