#pragma once #include namespace ksys { class IMessageBroker; class IMessageBrokerRegister; class MessageDispatcherBase; struct MesTransceiverId; class MessageReceiverEx; struct MessageType; class MessageTransceiverBase { public: MessageTransceiverBase(); virtual ~MessageTransceiverBase(); bool checkReceiverFlag() const; bool isWaitingForAck() const; virtual bool sendMessage(const MesTransceiverId& dest, const MessageType& type, void* user_data, bool ack); virtual bool sendMessageOnProcessingThread(const MesTransceiverId& dest, const MessageType& type, void* user_data, bool ack); virtual bool sendMessage(IMessageBroker& broker, const MessageType& type, void* user_data, bool ack); virtual bool sendMessageOnProcessingThread(IMessageBroker& broker, const MessageType& type, void* user_data, bool ack); virtual MessageReceiverEx* getReceiver() const = 0; MessageDispatcherBase* getDispatcher(); MesTransceiverId* getId() const { return mId; } IMessageBrokerRegister* getRegister(IMessageBroker& broker) const; static void setGlobalDispatcher(MessageDispatcherBase* dispatcher); private: static MessageDispatcherBase* sDispatcher; MessageDispatcherBase* mDispatcher = sDispatcher; MesTransceiverId* mId{}; }; } // namespace ksys