Browse Source

添加接口自动切换

alroyso 2 years ago
parent
commit
4d92cae689

+ 11 - 0
SProxy/CManageNetWork.cpp

@@ -138,6 +138,16 @@ void CManageNetWork::Reg(LPCSTR username, LPCSTR password)
 	m_Asyntask.AddTask(&CManageNetWork::ThreadFun_Reg, this, (LPARAM)m_base_curl);
 }
 
+void CManageNetWork::SetUrlList(std::vector<ServerListUrl> data)
+{
+	if (!m_base_curl)
+	{
+		return;
+	}
+
+	m_base_curl->SetUrlArray(data);
+}
+
 void CManageNetWork::ThreadFun_login(LPARAM lParam)
 {
 	IBaseCurl* lpAsyncParam = reinterpret_cast<IBaseCurl*>(lParam);
@@ -289,6 +299,7 @@ void CManageNetWork::ThreadFun_Version_Config(LPARAM lParam)
 	EventVerions* pEvt = new EventVerions(nullptr);
 	pEvt->status = code;
 	pEvt->msg = msg;
+	pEvt->versionupdate = CApp::getSingletonPtr()->GetVerinfo()->versionupdate;
 	SNotifyCenter::getSingleton().FireEventAsync(pEvt);
 	pEvt->Release();
 }

+ 2 - 0
SProxy/CManageNetWork.h

@@ -33,6 +33,8 @@ public:
 
 	void Reg(LPCSTR username, LPCSTR password);
 
+	void SetUrlList(std::vector<ServerListUrl> data);
+
 private:
 	void ThreadFun_login(LPARAM lParam);
 	void ThreadFun_Dowlon_Config(LPARAM lParam);

+ 50 - 1
SProxy/CNetWork.cpp

@@ -19,6 +19,10 @@ int  CNetWork::GetHttpStatus() {
 	return m_http_status;
 }
 
+void CNetWork::SetUrlArray(std::vector<ServerListUrl> data) {
+	m_url_list = data;
+}
+
 HTTPRET  CNetWork::Version(std::string& data) {
 	std::vector<cpr::Parameter> p;
 	p.push_back({ "tag","win" });
@@ -70,6 +74,7 @@ HTTPRET CNetWork::GetServerNode(std::string& data) {
 
 HTTPRET CNetWork::GetSysConfig(std::string& data)
 {
+	
 	std::vector<cpr::Parameter> p;
 	std::string text = GetUrl("/api/client/v3/getconfig", p);
 	if (text.empty()) {
@@ -144,6 +149,9 @@ HTTPRET CNetWork::PostLogin(LPCSTR username, LPCSTR password, std::string& data)
 }
 
 HTTPRET  CNetWork::GetSysConfigFromUser(LPCSTR username, LPCSTR password, std::string& data) {
+
+	 
+
 	std::vector<cpr::Parameter> p;
 	p.push_back({ "email",username });
 	p.push_back({ "password",password });
@@ -226,6 +234,8 @@ SStringW CNetWork::GetLastErrorW()
 
 std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> parame,std::string token)
 {
+	AutoToggleNode();
+
 	cpr::Parameters ps;
 	std::vector<cpr::Parameter>::iterator it_i;
 	for (it_i = parame.begin(); it_i != parame.end(); ++it_i)
@@ -244,7 +254,7 @@ std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> param
 		hander = cpr::Header{ {"accept", "application/json"} };
 	}
 
-	auto s = fmt::format("{0}{1}", m_url, path.c_str());
+	
 
 	cpr::Response r;
 
@@ -252,12 +262,15 @@ std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> param
 	std::string res_test = "";
 	//auto session = GetSession();
 	int count = 3;
+	/*int serverurlid = 0;*/
 	do
 	{
 		if (count <= 0)
 		{
 			break;
 		}
+
+		auto s = fmt::format("{0}{1}", m_url, path.c_str());
 		
 		if (parame.empty())
 		{
@@ -293,6 +306,7 @@ std::string CNetWork::GetUrl(std::string path, std::vector<cpr::Parameter> param
 			else {
 				m_error_msg = UpdateError(r.error.code, r.error.message);
 			}
+
 		}
 
 		if (!res_test.empty())
@@ -379,6 +393,7 @@ std::string CNetWork::PostUrl(std::string path, std::vector<cpr::Pair> parame, s
 
 				m_error_msg = UpdateError(r.error.code, r.error.message);
 			}
+ 
 		}
 
 		if (!res_test.empty())
@@ -395,7 +410,41 @@ std::string CNetWork::PostUrl(std::string path, std::vector<cpr::Pair> parame, s
 
 	return res_test;
 }
+void CNetWork::AutoToggleNode() {
+
+	cpr::Header hander;
+	hander = cpr::Header{ {"accept", "application/json"} };
+	 
+	std::vector<cpr::Parameter> p;
+	p.push_back({ "tag","win" });
+	p.push_back({ "appverion",S_CW2A(VERSION).GetBuffer(0) });
+	cpr::Parameters ps;
+	std::vector<cpr::Parameter>::iterator it_i;
+	for (it_i = p.begin(); it_i != p.end(); ++it_i)
+	{
+		ps.Add(*it_i);
+		//ps(cpr::Parameter({ it->first, it->second }));
+	}
+	//Çл»½Úµã£¬
+	for each (ServerListUrl  itme in m_url_list)
+	{
+		auto s = fmt::format("{0}{1}", itme.url, "/api/client/v3/version");
+		m_session.SetHeader(hander);
+		m_session.SetVerifySsl(false);
+		m_session.SetTimeout(cpr::Timeout{ TIMEOUTE });
+		m_session.SetUrl(s.c_str());
+		m_session.SetParameters(ps);
+		auto r = m_session.Get();
+		if (r.status_code == 200) {
+			m_url = itme.url;
+			Logger::getSingletonPtr()->INFO(S_CW2A(itme.name).GetBuffer(0));
+		}
+	}
 
+
+
+ 
+}
 std::string CNetWork::Retrying(std::string path, std::vector<cpr::Parameter> parame, std::string token)
 {
 

+ 5 - 1
SProxy/CNetWork.h

@@ -12,6 +12,8 @@ public:
 	CNetWork();
 	~CNetWork(void);
 
+	void SetUrlArray(std::vector<ServerListUrl> data);
+
 	HTTPRET GetServerNode(std::string& data);
 
 	HTTPRET PostLogin(LPCSTR username, LPCSTR password, std::string& data);
@@ -38,7 +40,7 @@ private:
 	std::string GetUrl(std::string path, std::vector<cpr::Parameter> parame, std::string token = "");
 	std::string PostUrl(std::string path, std::vector<cpr::Pair> parame,std::string token = "");
 	std::string Retrying(std::string path, std::vector<cpr::Parameter> parame, std::string token = "");
-	
+	void AutoToggleNode();
 	void Init();
 	void UnInit();
 	std::string UpdateError(cpr::ErrorCode code,std::string msg);
@@ -65,5 +67,7 @@ private:
 
 	std::string m_url;
 
+	std::vector<ServerListUrl> m_url_list;
+
 };
 

+ 1 - 1
SProxy/CVersion.cpp

@@ -26,7 +26,7 @@ bool CVersion::Inti(std::string data)
 			this->appversion = j["data"]["appversion"].get<std::string>();
 			this->appdownload = j["data"]["appdownload"].get<std::string>();
 			this->appmsg = j["data"]["appmsg"].get<std::string>();
-		 
+			this->versionupdate = j["data"]["versionupdate"].get<int>();
 			return true;
 
 		}

+ 1 - 0
SProxy/CVersion.h

@@ -16,6 +16,7 @@ public:
 	std::string appversion;
 	std::string appdownload;
 	std::string appmsg;
+	int versionupdate;
  
 };
 

+ 4 - 0
SProxy/IBaseCurl.h

@@ -1,5 +1,7 @@
 #pragma once
 
+#include "comm.h"
+
 enum struct  HTTPRET
 {
 	http_no = 0,
@@ -25,6 +27,8 @@ public:
 	//
 	virtual bool Download(std::string path) = 0;
 
+	virtual void SetUrlArray(std::vector<ServerListUrl> data) = 0;
+
 	//怬xia'zai
 	virtual HTTPRET PostLogin(LPCSTR username, LPCSTR password, std::string& data) = 0;
 

BIN
SProxy/LoginDlg.cpp


BIN
SProxy/LoginDlg.h


BIN
SProxy/MainDlg.cpp


BIN
SProxy/MainDlg.h


+ 8 - 1
SProxy/comm.h

@@ -21,4 +21,11 @@ constexpr auto CONNECT_NODE_MSG = L"
 constexpr auto SUEECS_NODE_MSG = L"»ñÈ¡½Úµã³É¹¦.."; 
 
 
-constexpr auto VERSION = L"1.1.9";
+constexpr auto VERSION = L"1.2.0";
+
+
+struct ServerListUrl {
+	int        id;
+	SStringW  name;
+	std::string url;
+};

+ 1 - 0
SProxy/event.h

@@ -95,6 +95,7 @@ public:
 
 	int		 status;
 	SStringW msg;
+	int		 versionupdate;
 };