26 #include <initializer_list> 31 #include <boost/thread/locks.hpp> 32 #include <boost/thread/shared_mutex.hpp> 46 using Middleware = std::function<Handler(Handler)>;
48 using Logger = std::function<void(const std::string&)>;
72 Registrar with(
const std::string& prefix, Middleware m)
const;
73 Registrar with_prefix(
const std::string& prefix)
const;
74 Registrar with_middleware(Middleware m)
const;
75 std::string prefix()
const {
return prefix_; }
76 Middleware middleware()
const {
return middleware_; }
77 virtual void register_handler(
const std::string& route, Handler h);
80 Registrar(
const std::string& prefix, Middleware m) : prefix_(prefix), middleware_(m) {}
85 Middleware middleware_;
91 ProxyRegistrar(
const std::map<T, Registrar*>& registrars,
const std::string& prefix, Middleware m)
92 : registrars_(registrars), prefix_(prefix), middleware_(m) {}
93 explicit ProxyRegistrar(std::initializer_list<std::pair<T, Registrar*>> registrars) {
94 for (
auto p : registrars) {
95 registrars_[p.first] = p.second;
100 assert(prefix.size() == 0 || prefix[0] ==
'/');
105 assert(prefix.size() > 0 && prefix[0] ==
'/');
110 assert(m !=
nullptr);
114 std::string prefix()
const {
return prefix_; }
115 Middleware middleware()
const {
return middleware_; }
117 void register_handler(
const std::string& route, T select, Handler h) {
118 assert(route.size() != 0 && route[0] ==
'/');
119 assert(registrars_.size() != 0);
123 auto endpoint = route;
124 if (prefix_.size() != 0) {
125 endpoint = prefix_ + route;
127 registrars_.at(select)->register_handler(endpoint, h);
131 std::map<T, Registrar*> registrars_;
133 Middleware middleware_;
146 assert(server_ !=
nullptr);
150 assert(server_ !=
nullptr);
151 assert(prefix_.size() == 0 || prefix_[0] ==
'/');
155 void register_handler(
const std::string& route, Handler h)
override;
157 void set_prefix(
const std::string& prefix) { prefix_ = prefix; }
158 void set_logger(Logger
logger) { logger_ = logger; }
160 const std::vector<std::string>& endpoints()
const {
return endpoints_; }
163 void log(
const std::string& endpoint) {
172 std::vector<std::string> endpoints_;
188 using StaticRegistrar::StaticRegistrar;
190 void register_handler(
const std::string& route, Handler h)
override;
197 boost::unique_lock<boost::shared_mutex>
lock() {
198 return boost::unique_lock<boost::shared_mutex>(access_);
202 mutable boost::shared_mutex access_;
225 using StaticRegistrar::StaticRegistrar;
230 void register_handler(
const std::string& route, Handler h)
override;
239 void refresh_buffer();
248 void refresh_route(
const std::string& key);
251 mutable boost::shared_mutex access_;
Definition: registrar.hpp:223
Definition: handler.hpp:197
Definition: registrar.hpp:89
std::function< void(const Request &, Response &)> Handler
Definition: handler.hpp:348
Definition: registrar.hpp:38
Definition: route_muxer.hpp:63
Definition: registrar.hpp:67
Definition: registrar.hpp:186
Definition: registrar.hpp:143
Definition: enum_test.cpp:29
boost::unique_lock< boost::shared_mutex > lock()
Definition: registrar.hpp:197
Middleware chain_middleware(Middleware x, Middleware y)
Definition: registrar.cpp:34
Definition: server.hpp:103