From 5da63998d6efc91e3fabee125805a63849ee1b86 Mon Sep 17 00:00:00 2001 From: Denis Koronchik Date: Thu, 27 Oct 2016 13:26:23 +0300 Subject: [PATCH] Add support of custom ServiceHandler --- include/server/request_handler.hpp | 4 ++-- include/server/server.hpp | 2 +- include/server/service_handler.hpp | 12 ++++++++++-- src/server/request_handler.cpp | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/server/request_handler.hpp b/include/server/request_handler.hpp index d76ba6dac..d83d088e4 100644 --- a/include/server/request_handler.hpp +++ b/include/server/request_handler.hpp @@ -24,12 +24,12 @@ class RequestHandler RequestHandler(const RequestHandler &) = delete; RequestHandler &operator=(const RequestHandler &) = delete; - void RegisterServiceHandler(std::unique_ptr service_handler); + void RegisterServiceHandler(std::unique_ptr service_handler); void HandleRequest(const http::request ¤t_request, http::reply ¤t_reply); private: - std::unique_ptr service_handler; + std::unique_ptr service_handler; }; } } diff --git a/include/server/server.hpp b/include/server/server.hpp index 7f0e1da11..1aa3a9e75 100644 --- a/include/server/server.hpp +++ b/include/server/server.hpp @@ -86,7 +86,7 @@ class Server void Stop() { io_service.stop(); } - void RegisterServiceHandler(std::unique_ptr service_handler_) + void RegisterServiceHandler(std::unique_ptr service_handler_) { request_handler.RegisterServiceHandler(std::move(service_handler_)); } diff --git a/include/server/service_handler.hpp b/include/server/service_handler.hpp index cb9b03762..25c7d0302 100644 --- a/include/server/service_handler.hpp +++ b/include/server/service_handler.hpp @@ -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> service_map; diff --git a/src/server/request_handler.cpp b/src/server/request_handler.cpp index 38d54847c..ca10769f4 100644 --- a/src/server/request_handler.cpp +++ b/src/server/request_handler.cpp @@ -30,7 +30,7 @@ namespace osrm namespace server { -void RequestHandler::RegisterServiceHandler(std::unique_ptr service_handler_) +void RequestHandler::RegisterServiceHandler(std::unique_ptr service_handler_) { service_handler = std::move(service_handler_); }