TinyRobotics
Loading...
Searching...
No Matches
MessageBus.h
1#pragma once
2#include "Message.h"
3#include "TinyRobotics/utils/LoggerClass.h"
4#include "TinyRobotics/vehicles/Vehicle.h"
5
6namespace tinyrobotics {
7
8/**
9 * @class MessageBus
10 * @ingroup communication
11 * @brief A message handler that forwards messages to multiple registered
12 * handlers.
13 *
14 * The MessageBus class implements the MessageHandler interface and allows you
15 * to broadcast messages to multiple other MessageHandler instances. It is
16 * useful for publisher-subscriber or observer patterns, where a single message
17 * source needs to notify multiple listeners or output streams.
18 *
19 * Usage:
20 * - Register handlers using add(MessageHandler&)
21 * - When a message is received, it is forwarded to all registered handlers
22 *
23 * Supported message types:
24 * - Message<float>
25 * - Message<Coordinate<float>>
26 * - Message<GPSCoordinate> (default: warning, not handled)
27 */
28
29class MessageBus : public MessageHandler {
30 public:
31 /// Default constructor
32 MessageBus() = default;
33
34 /// Add a MessageHandler to the bus. All messages received by the bus will be
35 /// forwarded to this handler.
36 void add(MessageHandler& stream) { p_handlers.push_back(&stream); }
37
38 /// Forward incoming messages to all registered handlers.
39 bool onMessage(const Message<float>& msg) override {
40 for (auto& stream : p_handlers) {
41 stream->onMessage(msg);
42 }
43 return true;
44 }
45
46 /// Forward incoming messages to all registered handlers.
47 bool onMessage(const Message<Coordinate<float>>& msg) override {
48 for (auto& stream : p_handlers) {
49 stream->onMessage(msg);
50 }
51 return true;
52 };
53
54 /// Forward incoming messages to all registered handlers.
55 bool onMessage(const Message<GPSCoordinate>& msg) override {
56 for (auto& stream : p_handlers) {
57 stream->onMessage(msg);
58 }
59 return true;
60 };
61
62 /// Removes all registere handlers from the bus.
63 void clear() {
64 p_handlers.clear();
65 }
66
67 /// Get the number of registered handlers
68
69 protected:
71};
72
73} // namespace tinyrobotics
A generic 3D coordinate class for robotics, navigation, and spatial calculations.
Definition: Coordinate.h:57
Represents a geodetic GPS coordinate with latitude, longitude, and optional altitude.
Definition: GPSCoordinate.h:52
A message handler that forwards messages to multiple registered handlers.
Definition: MessageBus.h:29
std::vector< MessageHandler * > p_handlers
Get the number of registered handlers.
Definition: MessageBus.h:70
bool onMessage(const Message< Coordinate< float > > &msg) override
Forward incoming messages to all registered handlers.
Definition: MessageBus.h:47
bool onMessage(const Message< GPSCoordinate > &msg) override
Forward incoming messages to all registered handlers.
Definition: MessageBus.h:55
MessageBus()=default
Default constructor.
bool onMessage(const Message< float > &msg) override
Forward incoming messages to all registered handlers.
Definition: MessageBus.h:39
void clear()
Removes all registere handlers from the bus.
Definition: MessageBus.h:63
void add(MessageHandler &stream)
Definition: MessageBus.h:36
Interface for handling messages in the TinyRobotics framework.
Definition: MessageHandler.h:18
Generic message structure for communication, parameterized by value type.
Definition: Message.h:72