Skip to content

Commit 1dceeaa

Browse files
committed
HTTP Manager cleanup
1 parent 5d68acf commit 1dceeaa

3 files changed

Lines changed: 31 additions & 19 deletions

File tree

GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/HTTP/HTTPManager.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ class HTTPManager
3434

3535
void Tick();
3636

37+
void AddHandleToMulti(CURL* pNewHandle);
38+
void RemoveHandleFromMulti(CURL* pHandleToRemove);
39+
3740
void SendGETRequest(const char* szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback = nullptr, int timeoutMS = -1);
3841
void SendPOSTRequest(const char* szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char* szPostData, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback = nullptr, int timeoutMS = -1);
3942
void SendPUTRequest(const char* szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char* szData, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback = nullptr, int timeoutMS = -1);
@@ -75,8 +78,6 @@ class HTTPManager
7578
std::string& GetProxyAddress() { return m_strProxyAddr; }
7679
uint16_t GetProxyPort() const { return m_proxyPort; }
7780

78-
79-
CURLM* GetMultiHandle() { return m_pCurl; }
8081
private:
8182
HTTPRequest* PlatformCreateRequest(EHTTPVerb htpVerb, EIPProtocolVersion protover, const char* szURI, std::map<std::string, std::string>& inHeaders, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback,
8283
std::function<void(size_t bytesReceived)> progressCallback = nullptr, int timeoutMS = -1) noexcept;
@@ -88,6 +89,7 @@ class HTTPManager
8889
std::string m_strProxyAddr;
8990
uint16_t m_proxyPort;
9091

92+
std::vector<HTTPRequest*> m_vecRequestsPendingStart = std::vector<HTTPRequest*>();
9193
std::vector<HTTPRequest*> m_vecRequestsInFlight = std::vector<HTTPRequest*>();
9294

9395
std::recursive_mutex m_Mutex;

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPManager.cpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ void HTTPManager::SendGETRequest(const char* szURI, EIPProtocolVersion protover,
1212

1313
HTTPRequest* pRequest = PlatformCreateRequest(EHTTPVerb::HTTP_VERB_GET, protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
1414

15-
// start immediately
16-
pRequest->StartRequest();
17-
m_vecRequestsInFlight.push_back(pRequest);
15+
m_vecRequestsPendingStart.push_back(pRequest);
1816
}
1917

2018
void HTTPManager::SendPOSTRequest(const char* szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char* szPostData, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback, int timeoutMS)
@@ -24,9 +22,7 @@ void HTTPManager::SendPOSTRequest(const char* szURI, EIPProtocolVersion protover
2422
HTTPRequest* pRequest = PlatformCreateRequest(EHTTPVerb::HTTP_VERB_POST, protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
2523
pRequest->SetPostData(szPostData);
2624

27-
// start immediately
28-
pRequest->StartRequest();
29-
m_vecRequestsInFlight.push_back(pRequest);
25+
m_vecRequestsPendingStart.push_back(pRequest);
3026
}
3127

3228
void HTTPManager::SendPUTRequest(const char* szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char* szData, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback /*= nullptr*/, int timeoutMS)
@@ -36,9 +32,7 @@ void HTTPManager::SendPUTRequest(const char* szURI, EIPProtocolVersion protover,
3632
HTTPRequest* pRequest = PlatformCreateRequest(EHTTPVerb::HTTP_VERB_PUT, protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
3733
pRequest->SetPostData(szData);
3834

39-
// start immediately
40-
pRequest->StartRequest();
41-
m_vecRequestsInFlight.push_back(pRequest);
35+
m_vecRequestsPendingStart.push_back(pRequest);
4236
}
4337

4438
void HTTPManager::SendDELETERequest(const char* szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char* szData, std::function<void(bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback /*= nullptr*/, int timeoutMS)
@@ -48,9 +42,7 @@ void HTTPManager::SendDELETERequest(const char* szURI, EIPProtocolVersion protov
4842
HTTPRequest* pRequest = PlatformCreateRequest(EHTTPVerb::HTTP_VERB_DELETE, protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
4943
pRequest->SetPostData(szData);
5044

51-
// start immediately
52-
pRequest->StartRequest();
53-
m_vecRequestsInFlight.push_back(pRequest);
45+
m_vecRequestsPendingStart.push_back(pRequest);
5446
}
5547

5648
void HTTPManager::Shutdown()
@@ -80,6 +72,14 @@ void HTTPManager::Tick()
8072
{
8173
std::scoped_lock<std::recursive_mutex> lock(m_Mutex);
8274

75+
// start anything needing starting
76+
for (HTTPRequest* pRequest : m_vecRequestsPendingStart)
77+
{
78+
pRequest->StartRequest();
79+
m_vecRequestsInFlight.push_back(pRequest);
80+
}
81+
m_vecRequestsPendingStart.clear();
82+
8383
// perform and poll
8484
int numReqs = 0;
8585
curl_multi_perform(m_pCurl, &numReqs);
@@ -114,3 +114,15 @@ void HTTPManager::Tick()
114114
delete pRequestToDestroy;
115115
}
116116
}
117+
118+
void HTTPManager::AddHandleToMulti(CURL* pNewHandle)
119+
{
120+
std::scoped_lock<std::recursive_mutex> lock(m_Mutex);
121+
curl_multi_add_handle(m_pCurl, pNewHandle);
122+
}
123+
124+
void HTTPManager::RemoveHandleFromMulti(CURL* pHandleToRemove)
125+
{
126+
std::scoped_lock<std::recursive_mutex> lock(m_Mutex);
127+
curl_multi_remove_handle(m_pCurl, pHandleToRemove);
128+
}

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/HTTP/HTTPRequest.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ HTTPRequest::HTTPRequest(EHTTPVerb httpVerb, EIPProtocolVersion protover, const
3636
HTTPRequest::~HTTPRequest()
3737
{
3838
HTTPManager* pHTTPManager = NGMP_OnlineServicesManager::GetInstance()->GetHTTPManager();
39-
CURLM* pMultiHandle = pHTTPManager->GetMultiHandle();
39+
pHTTPManager->RemoveHandleFromMulti(m_pCURL);
4040

41-
curl_multi_remove_handle(pMultiHandle, m_pCURL);
4241
curl_easy_cleanup(m_pCURL);
4342

4443
m_vecBuffer.clear();
@@ -157,8 +156,7 @@ void HTTPRequest::PlatformStartRequest()
157156
if (m_pCURL)
158157
{
159158
HTTPManager* pHTTPManager = static_cast<HTTPManager*>(NGMP_OnlineServicesManager::GetInstance()->GetHTTPManager());
160-
CURLM* pMultiHandle = pHTTPManager->GetMultiHandle();
161-
curl_multi_add_handle(pMultiHandle, m_pCURL);
159+
pHTTPManager->AddHandleToMulti(m_pCURL);
162160

163161
curl_easy_setopt(m_pCURL, CURLOPT_URL, m_strURI.c_str());
164162
curl_easy_setopt(m_pCURL, CURLOPT_FOLLOWLOCATION, 1L);
@@ -233,4 +231,4 @@ void HTTPRequest::PlatformStartRequest()
233231
curl_easy_setopt(m_pCURL, CURLOPT_SSL_VERIFYHOST, 0);
234232
#endif
235233
}
236-
}
234+
}

0 commit comments

Comments
 (0)