4#include "../Platform/Threads.h"
33 using HubList = std::vector< MessageHub* >;
35 static constexpr size_t noLimit = 10000000;
40 bool addListener(
MessageHub* hub,
bool bidirectional =
false);
41 bool addListener(uint32_t hubid,
bool bidirectional =
false);
42 bool listenTo(
MessageHub* hub,
bool bidirectional =
false);
43 bool listenTo(uint32_t hubid,
bool bidirectional =
false);
45 bool removeListener(uint32_t hubid);
46 void removeAllListeners();
48 void disconnectFromSender(uint32_t hubid);
49 void disconnectFromAllSenders();
51 virtual void broadcastMessage(
const Message::Ptr& message);
54 virtual bool processMessages(
size_t limit = noLimit);
57 uint32_t
getID()
const {
return id; }
58 size_t getNoOfQueuedMessages();
59 void flushQueuedMessages();
86 virtual bool isSendOnly()
const override {
return true; }
#define COGSFOUNDATION_API
Definition: FoundationBase.h:31
A MessageHub connects to other hubs to form a simple peer-to-peer application-internal networking sys...
Definition: MessageHub.h:30
std::deque< Message::Ptr > MessageQueue
Definition: MessageHub.h:32
MessageQueue messages
Messages waiting to be processed by this hub.
Definition: MessageHub.h:65
Mutex hubsMutex
Mutex protecting the above lists.
Definition: MessageHub.h:70
Mutex messagesMutex
Mutex for the above queue.
Definition: MessageHub.h:66
uint32_t id
Our ID.
Definition: MessageHub.h:71
uint32_t getID() const
Definition: MessageHub.h:57
std::vector< MessageHub * > HubList
Definition: MessageHub.h:33
HubList listeners
List of hubs listening to our messages.
Definition: MessageHub.h:68
HubList senders
List of hubs to which we are listening.
Definition: MessageHub.h:69
virtual void processMessage(Message &)
Definition: MessageHub.h:73
virtual bool isSendOnly() const
Definition: MessageHub.h:55
std::shared_ptr< Message > Ptr
Definition: Message.h:15
A MessageHub that only supports sending messages.
Definition: MessageHub.h:83
SendOnlyMessageHub(uint32_t ident=0)
Definition: MessageHub.h:85
virtual void queueMessage(const Message::Ptr &) override
Queue a message for this hub to process.
Definition: MessageHub.h:89
virtual bool isSendOnly() const override
Definition: MessageHub.h:86
constexpr uint32_t cFirstWindowHubID
Definition: MessageHub.h:14
constexpr uint32_t cApplicationHubID
Definition: MessageHub.h:13
Main Cogs namespace.
Definition: MortonCode.h:5
std::mutex Mutex
Definition: Threads.h:62