MADARA  3.4.1
PeerDiscovery.cpp
Go to the documentation of this file.
1 #include "PeerDiscovery.h"
3 
4 namespace utility = madara::utility;
6 
8  const std::string& prefix, knowledge::KnowledgeRecord::Integer heart_beat)
9  : initialized_(false),
10  prefix_(prefix),
11  heart_beat_(heart_beat * 1000000000),
12  last_clear_(0)
13 {
14 }
15 
17 
19  knowledge::KnowledgeMap& /*records*/,
20  const transport::TransportContext& transport_context,
22 {
23  if (!initialized_)
24  {
25  peers_.set_name(prefix_, vars);
26  initialized_ = true;
27  }
28 
29  std::string originator(transport_context.get_originator());
30  Integer cur_time = (Integer)transport_context.get_current_time();
31 
32  peers_.set(originator, cur_time);
33 
34  if (heart_beat_ > 0 && last_clear_ != cur_time)
35  {
36  std::vector<std::string> keys;
37  peers_.sync_keys();
38 
39  peers_.keys(keys);
40 
41  for (size_t i = 0; i < keys.size(); ++i)
42  {
43  // if the current originator is old, erase it
44  if (cur_time - peers_[keys[i]].to_integer() > heart_beat_)
45  {
46  peers_.erase(keys[i]);
47  }
48  }
49  }
50 }
madara::knowledge::KnowledgeRecord::Integer Integer
madara::knowledge::KnowledgeRecord::Integer Integer
PeerDiscovery(const std::string &prefix=".peers", knowledge::KnowledgeRecord::Integer heart_beat=-1)
Constructor.
virtual ~PeerDiscovery()
Destructor.
virtual void filter(knowledge::KnowledgeMap &records, const transport::TransportContext &transport_context, knowledge::Variables &vars)
User-implementable method for performing a filter on network data.
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
Provides context about the transport.
uint64_t get_current_time(void) const
Gets the current timestamp.
const std::string & get_originator(void) const
Returns the current message originator.
constexpr string_t string
::std::map< std::string, KnowledgeRecord > KnowledgeMap
Provides utility functions and classes for common tasks and needs.
Definition: IteratorImpl.h:15