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 &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);
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 RegisterServiceHandler(std::unique_ptr<ServiceHandler> service_handler_)
void RegisterServiceHandler(std::unique_ptr<ServiceHandlerInterface> service_handler_)
{
request_handler.RegisterServiceHandler(std::move(service_handler_));
}

View File

@ -23,13 +23,21 @@ namespace api
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:
ServiceHandler(osrm::EngineConfig &config);
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:
std::unordered_map<std::string, std::unique_ptr<service::BaseService>> service_map;

View File

@ -30,7 +30,7 @@ namespace osrm
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_);
}