blob: 5d613ab987490e38c751fdc1c2b6d47ea90c1b89 [file] [log] [blame]
Austin Schuh898f4972020-01-11 17:21:25 -08001#ifndef AOS_EVENTS_SIMULATED_NETWORK_BRIDGE_H_
2#define AOS_EVENTS_SIMULATED_NETWORK_BRIDGE_H_
3
4#include "aos/events/event_loop.h"
5#include "aos/events/simulated_event_loop.h"
6
7namespace aos {
8namespace message_bridge {
9
10class RawMessageDelayer;
11
12// This class moves messages between nodes. It is implemented as a separate
13// class because it would have been even harder to manage forwarding in the
14// SimulatedEventLoopFactory.
15class SimulatedMessageBridge {
16 public:
17 // Constructs the bridge.
18 SimulatedMessageBridge(
19 SimulatedEventLoopFactory *simulated_event_loop_factory);
20 ~SimulatedMessageBridge();
21
22 private:
23 // Map of nodes to event loops. This is a member variable so that the
24 // lifetime of the event loops matches the lifetime of the bridge.
25 std::map<const Node *, std::unique_ptr<aos::EventLoop>> event_loop_map_;
26
27
28 // List of delayers used to resend the messages.
29 using DelayersVector = std::vector<std::unique_ptr<RawMessageDelayer>>;
30 std::vector<std::unique_ptr<DelayersVector>> delayers_list_;
31};
32
33} // namespace message_bridge
34} // namespace aos
35
36#endif // AOS_EVENTS_SIMULATED_NETWORK_BRIDGE_H_