22#include <knp/core/impexp.h>
30#include <unordered_map>
34#include <boost/mp11.hpp>
46template <
class Message>
55template <
class Message>
67 : endpoint_(std::move(endpoint)), process_messages_(processor), base_data_{uid}
81 void subscribe(
const std::vector<core::UID> &entities) { endpoint_.subscribe<Message>(base_data_.uid_, entities); }
88 endpoint_.receive_all_messages();
89 auto messages_raw = endpoint_.unload_messages<Message>(base_data_.uid_);
90 process_messages_(messages_raw);
97 [[nodiscard]] knp::core::UID
get_uid()
const {
return base_data_.uid_; }
100 core::MessageEndpoint endpoint_;
102 core::BaseData base_data_;
108using AllObservers = boost::mp11::mp_transform<MessageObserver, core::messaging::AllMessages>;
The MessageObserver class is a definition of an observer that receives messages and processes them.
void subscribe(const std::vector< core::UID > &entities)
Subscribe to messages.
MessageObserver(core::MessageEndpoint &&endpoint, MessageProcessor< Message > &&processor, core::UID uid=core::UID{true})
Constructor.
knp::core::UID get_uid() const
Get observer UID.
void update()
Receive and process messages.
MessageObserver(MessageObserver< Message > &&other) noexcept=default
Move constructor for observer.
Message endpoint interface.
Common header for messaging.
boost::mp11::mp_transform< MessageObserver, core::messaging::AllMessages > AllObservers
List of all possible observers.
std::function< void(const std::vector< Message >)> MessageProcessor
Functor for message processing.
boost::mp11::mp_rename< AllObservers, std::variant > AnyObserverVariant
Observer variant that contains all possible observers.