23 #ifndef CLOE_REGISTRAR_HPP_ 24 #define CLOE_REGISTRAR_HPP_ 44 template <
typename E,
typename... Ctx>
47 size_t size()
const {
return triggers_.size(); }
48 bool empty()
const {
return triggers_.empty(); }
50 void emplace(TriggerPtr&& t,
const Sync&)
override { triggers_.emplace_back(std::move(t)); }
51 void to_json(Json& j)
const override { j = triggers_; }
53 void trigger(
const Sync& sync,
const Ctx&... args) {
54 auto it = triggers_.begin();
55 while (it != triggers_.end()) {
56 auto& condition =
dynamic_cast<E&
>((*it)->event());
57 if (condition(sync, args...)) {
58 if ((*it)->is_sticky()) {
59 this->
execute((*it)->clone(), sync);
62 this->
execute(std::move(*it), sync);
63 it = triggers_.erase(it);
72 std::list<TriggerPtr> triggers_;
75 template <
typename E,
typename... Ctx>
76 using DirectCallbackPtr = std::shared_ptr<
DirectCallback<E, Ctx...>>;
129 virtual void register_static_handler(
const std::string& endpoint,
Handler) = 0;
139 virtual void register_api_handler(
const std::string& endpoint,
HandlerType,
Handler) = 0;
147 virtual std::unique_ptr<Registrar> with_api_prefix(
const std::string& prefix)
const = 0;
155 virtual std::unique_ptr<Registrar> with_static_prefix(
const std::string& prefix)
const = 0;
163 virtual std::unique_ptr<Registrar> with_trigger_prefix(
const std::string& prefix)
const = 0;
168 virtual void register_action(std::unique_ptr<ActionFactory>&&) = 0;
181 template <
typename F,
typename... Ctx>
183 register_action(std::make_unique<F>(std::forward<Ctx>(ctx)...));
196 virtual void register_event(std::unique_ptr<EventFactory>&& f, std::shared_ptr<Callback> c) = 0;
202 template <
typename F,
typename... Ctx>
203 DirectCallbackPtr<
typename F::EventType, Ctx...>
register_event(std::unique_ptr<F>&& f) {
204 auto callback = std::make_shared<
DirectCallback<
typename F::EventType, Ctx...>>();
205 this->register_event(std::move(f), callback);
221 template <
typename F,
typename... Ctx,
typename... Args>
223 auto callback = std::make_shared<
DirectCallback<
typename F::EventType, Ctx...>>();
224 this->register_event(std::make_unique<F>(args...), callback);
231 #endif // CLOE_REGISTRAR_HPP_ Definition: registrar.hpp:45
void emplace(TriggerPtr &&t, const Sync &) override
Definition: registrar.hpp:50
void execute(TriggerPtr &&t, const Sync &s)
Definition: trigger.cpp:111
Definition: registrar.hpp:117
HandlerType
Definition: registrar.hpp:84
std::function< void(const Request &, Response &)> Handler
Definition: handler.hpp:348
Definition: coordinator.hpp:36
void register_action(Ctx &&... ctx)
Definition: registrar.hpp:182
void to_json(Json &j) const override
Definition: registrar.hpp:51
DirectCallbackPtr< typename F::EventType, Ctx... > register_event(std::unique_ptr< F > &&f)
Definition: registrar.hpp:203
Definition: trigger.hpp:542
DirectCallbackPtr< typename F::EventType, Ctx... > register_event(Args... args)
Definition: registrar.hpp:222