Add support of custom ServiceHandler

This commit is contained in:
Denis Koronchik 2016-10-27 13:26:23 +03:00 committed by Daniel J. H
parent 6fc0609a62
commit 5da63998d6
4 changed files with 14 additions and 6 deletions

View File

@ -24,12 +24,12 @@ class RequestHandler
RequestHandler(const RequestHandler &) = delete; RequestHandler(const RequestHandler &) = delete;
RequestHandler &operator=(const RequestHandler &) = delete; RequestHandler &operator=(const RequestHandler &) = delete;
void RegisterServiceHandler(std::unique_ptr<ServiceHandler> service_handler); void RegisterServiceHandler(std::unique_ptr<ServiceHandlerInterface> service_handler);
void HandleRequest(const http::request &current_request, http::reply &current_reply); void HandleRequest(const http::request &current_request, http::reply &current_reply);
private: private:
std::unique_ptr<ServiceHandler> service_handler; std::unique_ptr<ServiceHandlerInterface> service_handler;
}; };
} }
} }

View File

@ -86,7 +86,7 @@ class Server
void Stop() { io_service.stop(); } void Stop() { io_service.stop(); }
void RegisterServiceHandler(std::unique_ptr<ServiceHandler> service_handler_) void RegisterServiceHandler(std::unique_ptr<ServiceHandlerInterface> service_handler_)
{ {
request_handler.RegisterServiceHandler(std::move(service_handler_)); request_handler.RegisterServiceHandler(std::move(service_handler_));
} }

View File

@ -23,13 +23,21 @@ namespace api
struct ParsedURL; struct ParsedURL;
} }
class ServiceHandler
class ServiceHandlerInterface
{
public:
virtual ~ServiceHandlerInterface() {}
virtual engine::Status RunQuery(api::ParsedURL parsed_url, service::BaseService::ResultT & result) = 0;
};
class ServiceHandler final : public ServiceHandlerInterface
{ {
public: public:
ServiceHandler(osrm::EngineConfig &config); ServiceHandler(osrm::EngineConfig &config);
using ResultT = service::BaseService::ResultT; using ResultT = service::BaseService::ResultT;
engine::Status RunQuery(api::ParsedURL parsed_url, ResultT &result); virtual engine::Status RunQuery(api::ParsedURL parsed_url, ResultT &result) override;
private: private:
std::unordered_map<std::string, std::unique_ptr<service::BaseService>> service_map; std::unordered_map<std::string, std::unique_ptr<service::BaseService>> service_map;

View File

@ -30,7 +30,7 @@ namespace osrm
namespace server namespace server
{ {
void RequestHandler::RegisterServiceHandler(std::unique_ptr<ServiceHandler> service_handler_) void RequestHandler::RegisterServiceHandler(std::unique_ptr<ServiceHandlerInterface> service_handler_)
{ {
service_handler = std::move(service_handler_); service_handler = std::move(service_handler_);
} }