summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/RequestManager.h')
-rw-r--r--src/Common/RequestManager.h46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/Common/RequestManager.h b/src/Common/RequestManager.h
index d9e7fbb..bd1c12d 100644
--- a/src/Common/RequestManager.h
+++ b/src/Common/RequestManager.h
@@ -21,6 +21,7 @@
#define MAD_COMMON_REQUESTMANAGER_H_
#include "Request.h"
+#include <Net/ThreadManager.h>
#include <map>
#include <memory>
@@ -43,7 +44,10 @@ class RequestManager : boost::noncopyable {
public:
bool addRequest(boost::uint16_t id, boost::shared_ptr<RequestHandler> info);
boost::shared_ptr<RequestHandler> findRequest(boost::uint16_t id);
- bool deleteRequest(boost::uint16_t id);
+ void deleteRequest(boost::uint16_t id);
+
+ private:
+ void doDeleteRequest(boost::uint16_t id);
};
class RequestHandlerFactory {
@@ -123,7 +127,7 @@ class RequestManager : boost::noncopyable {
}
template <class T>
- bool sendRequest(Connection *connection, Request::slot_type slot) {
+ boost::shared_ptr<Request> sendRequest0(Connection *connection, Request::slot_type slot = Request::empty_slot) {
boost::unique_lock<boost::shared_mutex> lock(mutex);
boost::shared_ptr<RequestMap> requestMap;
@@ -132,19 +136,19 @@ class RequestManager : boost::noncopyable {
requestMap = _getUnusedRequestId(connection, &requestId);
if(!requestMap)
- return false;
+ return boost::shared_ptr<Request>();
boost::shared_ptr<Request> request(new T(connection, requestId, slot));
requestMap->addRequest(requestId, request);
lock.unlock();
- request->sendRequest();
+ Net::ThreadManager::get()->pushWork(boost::bind(&Request::sendRequest, request));
- return true;
+ return request;
}
template <class T, typename T1>
- bool sendRequest(Connection *connection, Request::slot_type slot, T1 t1) {
+ boost::shared_ptr<Request> sendRequest1(Connection *connection, T1 t1, Request::slot_type slot = Request::empty_slot) {
boost::unique_lock<boost::shared_mutex> lock(mutex);
boost::shared_ptr<RequestMap> requestMap;
@@ -153,19 +157,19 @@ class RequestManager : boost::noncopyable {
requestMap = _getUnusedRequestId(connection, &requestId);
if(!requestMap)
- return false;
+ return boost::shared_ptr<Request>();
boost::shared_ptr<Request> request(new T(connection, requestId, slot, t1));
requestMap->addRequest(requestId, request);
lock.unlock();
- request->sendRequest();
+ Net::ThreadManager::get()->pushWork(boost::bind(&Request::sendRequest, request));
- return true;
+ return request;
}
template <class T, typename T1, typename T2>
- bool sendRequest(Connection *connection, Request::slot_type slot, T1 t1, T2 t2) {
+ boost::shared_ptr<Request> sendRequest2(Connection *connection, T1 t1, T2 t2, Request::slot_type slot = Request::empty_slot) {
boost::unique_lock<boost::shared_mutex> lock(mutex);
boost::shared_ptr<RequestMap> requestMap;
@@ -174,19 +178,19 @@ class RequestManager : boost::noncopyable {
requestMap = _getUnusedRequestId(connection, &requestId);
if(!requestMap)
- return false;
+ return boost::shared_ptr<Request>();
boost::shared_ptr<Request> request(new T(connection, requestId, slot, t1, t2));
requestMap->addRequest(requestId, request);
lock.unlock();
- request->sendRequest();
+ Net::ThreadManager::get()->pushWork(boost::bind(&Request::sendRequest, request));
- return true;
+ return request;
}
template <class T, typename T1, typename T2, typename T3>
- bool sendRequest(Connection *connection, Request::slot_type slot, T1 t1, T2 t2, T3 t3) {
+ boost::shared_ptr<Request> sendRequest3(Connection *connection, T1 t1, T2 t2, T3 t3, Request::slot_type slot = Request::empty_slot) {
boost::unique_lock<boost::shared_mutex> lock(mutex);
boost::shared_ptr<RequestMap> requestMap;
@@ -195,19 +199,19 @@ class RequestManager : boost::noncopyable {
requestMap = _getUnusedRequestId(connection, &requestId);
if(!requestMap)
- return false;
+ return boost::shared_ptr<Request>();
boost::shared_ptr<T> request(new T(connection, requestId, slot, t1, t2, t3));
requestMap->addRequest(requestId, request);
lock.unlock();
- request->sendRequest();
+ Net::ThreadManager::get()->pushWork(boost::bind(&Request::sendRequest, request));
- return true;
+ return request;
}
template <class T, typename T1, typename T2, typename T3, typename T4>
- bool sendRequest(Connection *connection, Request::slot_type slot, T1 t1, T2 t2, T3 t3, T4 t4) {
+ boost::shared_ptr<Request> sendRequest4(Connection *connection, T1 t1, T2 t2, T3 t3, T4 t4, Request::slot_type slot = Request::empty_slot) {
boost::unique_lock<boost::shared_mutex> lock(mutex);
boost::shared_ptr<RequestMap> requestMap;
@@ -216,15 +220,15 @@ class RequestManager : boost::noncopyable {
requestMap = _getUnusedRequestId(connection, &requestId);
if(!requestMap)
- return false;
+ return boost::shared_ptr<Request>();
boost::shared_ptr<Request> request(new T(connection, requestId, slot, t1, t2, t3, t4));
requestMap->addRequest(requestId, request);
lock.unlock();
- request->sendRequest();
+ Net::ThreadManager::get()->pushWork(boost::bind(&Request::sendRequest, request));
- return true;
+ return request;
}
};