rcpp_framework/core/request.cpp

86 lines
1.4 KiB
C++
Raw Normal View History

2020-11-25 00:20:41 +01:00
#include "request.h"
void Request::send() {
if (http_parser->isKeepAlive()) {
response->addHeadValue("Connection", "Keep-Alive");
std::string result = response->getResult();
(*session)->send(result.c_str(), result.size());
} else {
response->addHeadValue("Connection", "Close");
std::string result = response->getResult();
const HttpSession::Ptr lsession = (*session);
(*session)->send(result.c_str(), result.size(), [lsession]() { lsession->postShutdown(); });
}
RequestPool::return_request(this);
}
2020-11-25 00:20:41 +01:00
void Request::reset() {
http_parser = nullptr;
session = nullptr;
finalized = false;
2020-11-25 00:20:41 +01:00
if (response)
delete response;
response = new HttpResponse();
}
Request::Request() {
response = nullptr;
2020-11-25 00:20:41 +01:00
reset();
}
Request::~Request() {
delete response;
}
Request *RequestPool::get_request() {
_mutex.lock();
Request *request;
if (_requests.size() == 0) {
_mutex.unlock();
request = new Request();
return request;
}
request = _requests[_requests.size() - 1];
_requests.pop_back();
_mutex.unlock();
return request;
}
void RequestPool::return_request(Request *request) {
request->reset();
2020-11-25 00:20:41 +01:00
_mutex.lock();
2020-11-25 00:20:41 +01:00
_requests.push_back(request);
_mutex.unlock();
2020-11-25 00:20:41 +01:00
}
RequestPool::RequestPool() {
}
RequestPool::~RequestPool() {
for (uint32_t i = 0; i < _requests.size(); ++i) {
delete _requests[i];
}
_requests.clear();
}
std::mutex RequestPool::_mutex;
std::vector<Request *> RequestPool::_requests;