From babcdc3792e04ae776ee021e68f89b4bddcf1b89 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 21 Mar 2022 19:50:57 +0800 Subject: [PATCH] 1 --- server/gameserver/httpproxy.cc | 29 ++++++++++++++++++++++++++--- server/gameserver/httpproxy.h | 1 + 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/server/gameserver/httpproxy.cc b/server/gameserver/httpproxy.cc index ab2b1352..d01abbaa 100644 --- a/server/gameserver/httpproxy.cc +++ b/server/gameserver/httpproxy.cc @@ -1,6 +1,7 @@ #include "precompile.h" #include +#include #include "httpproxy.h" #include "app.h" @@ -42,19 +43,35 @@ std::string HttpProxy::HttpGet(a8::XParams param, request->on_error = on_error; request->url = url; request->url_params = url_params; + if (request_hash_.find(request->req_id) != request_hash_.end()) { + abort(); + } request_hash_[request->req_id] = request; + a8::MutableXObject* proxy_url_params = a8::MutableXObject::NewObject(); + proxy_url_params->SetVal("data", url_params.ToJsonStr()); std::string proxy_url; JsonDataMgr::Instance()->GetHttpProxyUrl(proxy_url); f8::HttpClientPool::Instance()->HttpGet (a8::XParams() .SetSender(request), - on_ok, - on_error, + [] (a8::XParams& param, a8::XObject& data) + { + HttpProxyRequest* req = (HttpProxyRequest*)(param.sender.GetUserData()); + req->on_ok(req->param, data); + HttpProxy::Instance()->DestoryRequest(req); + }, + [] (a8::XParams& param, const std::string& response) + { + HttpProxyRequest* req = (HttpProxyRequest*)(param.sender.GetUserData()); + req->on_error(req->param, response); + HttpProxy::Instance()->DestoryRequest(req); + }, proxy_url.c_str(), - url_params, + *proxy_url_params, rand() % MAX_SYS_HTTP_NUM ); + delete proxy_url_params; return request->req_id; } @@ -62,3 +79,9 @@ std::string HttpProxy::CreateRequestId() { return request_prefix_ + a8::XValue(App::Instance()->NewUuid()).GetString(); } + +void HttpProxy::DestoryRequest(HttpProxyRequest* request) +{ + request_hash_.erase(request->req_id); + delete request; +} diff --git a/server/gameserver/httpproxy.h b/server/gameserver/httpproxy.h index 5a64f105..87faa22c 100644 --- a/server/gameserver/httpproxy.h +++ b/server/gameserver/httpproxy.h @@ -25,6 +25,7 @@ class HttpProxy : public a8::Singleton private: std::string CreateRequestId(); + void DestoryRequest(HttpProxyRequest* request); private: std::map request_hash_;