-
Notifications
You must be signed in to change notification settings - Fork 19
/
PeerDiscovery.h
94 lines (80 loc) · 2.28 KB
/
PeerDiscovery.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#ifndef _MADARA_FILTERS_PEER_DISCOVERY_H_
#define _MADARA_FILTERS_PEER_DISCOVERY_H_
/**
* @file PeerDiscovery.h
* @author James Edmondson <jedmondson@gmail.com>
*
* This file contains a filter functor for aggregate records
**/
#include <string>
#include <vector>
#include <map>
#include <list>
#include "madara/knowledge/KnowledgeRecord.h"
#include "madara/knowledge/Functions.h"
#include "madara/utility/StdInt.h"
#include "madara/MadaraExport.h"
#include "madara/transport/TransportContext.h"
#include "madara/knowledge/Variables.h"
#include "madara/knowledge/containers/Map.h"
#include "AggregateFilter.h"
namespace madara
{
namespace filters
{
/**
* Filter for discovering neighboring peers
**/
class MADARA_EXPORT PeerDiscovery : public AggregateFilter
{
public:
/**
* Constructor
* @param prefix the prefix to store discovery information into
* the knowledge base
* @param heart_beat the time, in seconds, before dropping a peer from
* discovery. Negative values indicate that peers
* should never be erased.
**/
PeerDiscovery(const std::string& prefix = ".peers",
knowledge::KnowledgeRecord::Integer heart_beat = -1);
/**
* Destructor
**/
virtual ~PeerDiscovery();
/**
* User-implementable method for performing a filter on network
* data. This is a pure abstract function that must be overridden
* when implementing a subclass.
* @param records the aggregate records vector
* @param transport_context context for querying transport state
* @param vars context for querying current program state
**/
virtual void filter(knowledge::KnowledgeMap& records,
const transport::TransportContext& transport_context,
knowledge::Variables& vars);
protected:
/**
* Tracks if the peers_ map has been initialized
**/
bool initialized_;
/**
* The context
**/
std::string prefix_;
/**
* A map of discovered peers
**/
knowledge::containers::Map peers_;
/**
* The time to keep record of a peer
**/
knowledge::KnowledgeRecord::Integer heart_beat_;
/**
* The time of the last clear of the peer_list
**/
knowledge::KnowledgeRecord::Integer last_clear_;
};
}
}
#endif // _MADARA_FILTERS_PEER_DISCOVERY_H_