This commit is contained in:
aozhiwei 2024-03-24 13:52:22 +08:00
parent b3f165760b
commit c68e482dd8
2 changed files with 23 additions and 5 deletions

View File

@ -18,6 +18,14 @@
#include "downstreammgr.h" #include "downstreammgr.h"
#include "GCListener.h" #include "GCListener.h"
struct HttpTunnelRequest
{
int socket_handle = 0;
long long context_id = 0;
std::shared_ptr<f8::JsonHttpRequest> request;
};
class RequestTarget class RequestTarget
{ {
public: public:
@ -234,18 +242,26 @@ std::shared_ptr<RequestTarget> MasterMgr::GetRequestByContextId(long long contex
void MasterMgr::AddHttpTunnelRequest(int socket_handle, std::shared_ptr<f8::JsonHttpRequest> request) void MasterMgr::AddHttpTunnelRequest(int socket_handle, std::shared_ptr<f8::JsonHttpRequest> request)
{ {
pending_http_tunnel_socket_hash_[socket_handle] = request; ++curr_context_id_;
auto req = std::make_shared<HttpTunnelRequest>();
req->socket_handle = socket_handle;
req->context_id = curr_context_id_;
req->request = request;
pending_http_tunnel_socket_hash_[socket_handle] = req;
pending_http_tunnel_context_hash_[curr_context_id_] = req;
} }
void MasterMgr::RemoveHttpTunnelRequest(int socket_handle) void MasterMgr::RemoveHttpTunnelRequest(int socket_handle)
{ {
auto req = GetHttpTunnelRequest(socket_handle); auto req = GetHttpTunnelRequest(socket_handle);
if (req) { if (req) {
pending_http_tunnel_socket_hash_.end(); pending_http_tunnel_socket_hash_.erase(req->socket_handle);
pending_http_tunnel_context_hash_.erase(req->context_id);
} }
} }
std::shared_ptr<f8::JsonHttpRequest> MasterMgr::GetHttpTunnelRequest(int socket_handle) std::shared_ptr<HttpTunnelRequest> MasterMgr::GetHttpTunnelRequest(int socket_handle)
{ {
auto itr = pending_http_tunnel_socket_hash_.find(socket_handle); auto itr = pending_http_tunnel_socket_hash_.find(socket_handle);
return itr != pending_http_tunnel_socket_hash_.end() ? itr->second : nullptr; return itr != pending_http_tunnel_socket_hash_.end() ? itr->second : nullptr;

View File

@ -11,6 +11,7 @@ namespace ss
class SS_MS_HttpTunnelResponse; class SS_MS_HttpTunnelResponse;
} }
struct HttpTunnelRequest;
class RequestTarget; class RequestTarget;
class Master; class Master;
class MasterMgr : public a8::Singleton<MasterMgr> class MasterMgr : public a8::Singleton<MasterMgr>
@ -40,7 +41,7 @@ class MasterMgr : public a8::Singleton<MasterMgr>
void AddHttpTunnelRequest(int socket_handle, std::shared_ptr<f8::JsonHttpRequest> request); void AddHttpTunnelRequest(int socket_handle, std::shared_ptr<f8::JsonHttpRequest> request);
private: private:
std::shared_ptr<f8::JsonHttpRequest> GetHttpTunnelRequest(int socket_handle); std::shared_ptr<HttpTunnelRequest> GetHttpTunnelRequest(int socket_handle);
std::shared_ptr<RequestTarget> GetRequestBySocket(int socket_handle); std::shared_ptr<RequestTarget> GetRequestBySocket(int socket_handle);
std::shared_ptr<RequestTarget> GetRequestByContextId(long long context_id); std::shared_ptr<RequestTarget> GetRequestByContextId(long long context_id);
std::shared_ptr<Master> GetConnById(int instance_id); std::shared_ptr<Master> GetConnById(int instance_id);
@ -53,5 +54,6 @@ class MasterMgr : public a8::Singleton<MasterMgr>
std::map<int, std::shared_ptr<RequestTarget>> pending_socket_hash_; std::map<int, std::shared_ptr<RequestTarget>> pending_socket_hash_;
std::map<long long, std::shared_ptr<RequestTarget>> pending_context_hash_; std::map<long long, std::shared_ptr<RequestTarget>> pending_context_hash_;
std::map<int, std::shared_ptr<f8::JsonHttpRequest>> pending_http_tunnel_socket_hash_; std::map<int, std::shared_ptr<HttpTunnelRequest>> pending_http_tunnel_socket_hash_;
std::map<long long, std::shared_ptr<HttpTunnelRequest>> pending_http_tunnel_context_hash_;
}; };