diff options
Diffstat (limited to 'src/Common/RequestManager.h')
-rw-r--r-- | src/Common/RequestManager.h | 46 |
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; } }; |