7#pragma mark - MessageDispatcher
16 auto& listener_list =
listeners_[message_type];
18 std::remove(listener_list.begin(), listener_list.end(), listener),
28 std::unique_ptr<MessageFilter> filter) {
34 handlers_[message_type].push_back(handler);
39 for (
auto listener : listener_list) {
40 listener->OnMessageReceived(message);
46 if (protocol->CanHandleMessage(message)) {
52 for (
auto listener : listener_list) {
53 listener->OnMessageReceived(message);
57 for (
auto& listener : filtered_listener_list) {
58 if (listener.filter->ShouldReceiveMessage(message)) {
59 listener.listener->OnMessageReceived(message);
64 for (
auto& handler : handler_list) {
69#pragma mark - AsyncMessageDispatcher
88#pragma mark - MessageFilter
92 std::function<
void()> new_method) {
101 (instance->*(it->second))();
113#pragma mark - ObjectFactory
117 creators_[type_name] = []() {
return std::make_unique<T>(); };
121 const std::string& object_name)
const {
void EnqueueMessage(const Message &message)
std::vector< IMessageProtocol * > protocols_
void UnregisterListener(const std::string &message_type, IMessageListener *listener)
void RegisterListener(const std::string &message_type, IMessageListener *listener)
void BindHandler(const std::string &message_type, MessageHandler handler)
std::unordered_map< std::string, std::vector< ListenerWithFilter > > filtered_listeners_
std::unordered_map< std::string, std::vector< IMessageListener * > > listeners_
void SendMessage(const Message &message)
void DispatchMessage(const Message &message)
std::unordered_map< std::string, std::vector< MessageHandler > > handlers_
void RegisterProtocol(IMessageProtocol *protocol)
void RegisterFilteredListener(const std::string &message_type, IMessageListener *listener, std::unique_ptr< MessageFilter > filter)
std::unique_ptr< Reflectable > CreateObject(const std::string &type_name) const
std::unordered_map< std::string, std::function< std::unique_ptr< Reflectable >()> > creators_
void RegisterType(const std::string &type_name)
void CallOriginal(T *instance)
std::unordered_map< void *, void * > original_methods_
void Swizzle(T *instance, void(T::*original_method)(), std::function< void()> new_method)
void CallSwizzled(T *instance)
std::unordered_map< void *, std::function< void()> > swizzled_methods_
std::function< void(const Message &)> MessageHandler