Vanetza
 
Loading...
Searching...
No Matches
repeater.hpp
1#ifndef REPEATER_HPP_AH49FXB1
2#define REPEATER_HPP_AH49FXB1
3
4#include <vanetza/common/clock.hpp>
5#include <vanetza/geonet/data_request.hpp>
6#include <vanetza/geonet/packet.hpp>
7#include <functional>
8#include <list>
9#include <memory>
10
11namespace vanetza
12{
13// forward declaration
14class Runtime;
15
16namespace geonet
17{
18
19/**
20 * Repeater eases handling of packet repetitions.
21 * Packet repetitions are repeated requests with same payload.
22 */
24{
25public:
26 using Callback = std::function<void(const DataRequestVariant&, std::unique_ptr<DownPacket>)>;
27
28 /**
29 * Create a Repeater instance
30 * \param rt runtime used for scheduling repetitions
31 * \param cb callback to be invoked when repetition is due
32 */
33 Repeater(Runtime& rt, const Callback& cb);
34 ~Repeater();
35
36 /**
37 * Add another repetition
38 * \param request any kind of GeoNet data request
39 * \param payload request's payload
40 */
41 template<class REQUEST>
42 void add(const REQUEST& request, const DownPacket& payload)
43 {
44 if (request.repetition) {
45 add(request, *request.repetition, payload);
46 }
47 }
48
49private:
51 {
52 Repetition(const DataRequestVariant&, const DownPacket&);
53
54 DataRequestVariant m_request;
55 std::unique_ptr<DownPacket> m_payload;
56 };
57
58 /**
59 * Add packet repetition to internal book keeping
60 */
61 void add(const DataRequestVariant&, const DataRequest::Repetition&, const DownPacket&);
62
63 /**
64 * Triggered when repetition is due according to runtime
65 */
66 void trigger(std::list<Repetition>::iterator, Clock::time_point);
67
68 std::list<Repetition> m_repetitions;
69 Callback m_repeat_fn;
70 Runtime& m_runtime;
71};
72
73} // namespace geonet
74} // namespace vanetza
75
76#endif /* REPEATER_HPP_AH49FXB1 */
77
ChunckPacket is a packet consisting of several memory chunks.
void trigger(std::list< Repetition >::iterator, Clock::time_point)
Definition: repeater.cpp:38
void add(const REQUEST &request, const DownPacket &payload)
Definition: repeater.hpp:42