1#ifndef YAZE_APP_CORE_MESSAGE_H
2#define YAZE_APP_CORE_MESSAGE_H
10#include <unordered_map>
13#include "absl/status/status.h"
58 std::unique_ptr<MessageFilter> filter);
66 std::unique_ptr<MessageFilter>
filter;
68 std::unordered_map<std::string, std::vector<IMessageListener*>>
listeners_;
69 std::unordered_map<std::string, std::vector<ListenerWithFilter>>
71 std::unordered_map<std::string, std::vector<MessageHandler>>
handlers_;
92 void Swizzle(T* instance,
void (T::*original_method)(),
93 std::function<
void()> new_method);
113 const std::any& value) = 0;
115 const std::vector<std::any>& args) = 0;
120 template <
typename T>
123 std::unique_ptr<Reflectable>
CreateObject(
const std::string& type_name)
const;
126 std::unordered_map<std::string, std::function<std::unique_ptr<Reflectable>()>>
void EnqueueMessage(const Message &message)
std::queue< Message > messageQueue_
std::thread dispatchThread_
virtual absl::Status OnMessageReceived(const Message &message)=0
virtual ~IMessageListener()=default
virtual ~IMessageProtocol()=default
virtual bool CanHandleMessage(const Message &message) const =0
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)
virtual bool ShouldReceiveMessage(const Message &message) const =0
virtual ~MessageFilter()=default
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)
virtual std::any InvokeMethod(const std::string &method_name, const std::vector< std::any > &args)=0
virtual void SetPropertyValue(const std::string &property_name, const std::any &value)=0
virtual std::vector< std::string > GetPropertyNames() const =0
virtual std::string GetTypeName() const =0
virtual std::any GetPropertyValue(const std::string &property_name) const =0
virtual ~Reflectable()=default
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
std::unique_ptr< MessageFilter > filter
IMessageListener * listener
Message(const std::string &type, void *sender, const std::any &payload)