MADARA  3.2.3
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,
10  : initialized_ (false), prefix_ (prefix),
11  heart_beat_ (heart_beat * 1000000000), last_clear_ (0)
12 {
13 }
14 
16 {
17 }
18 
19 
20 void
22  knowledge::KnowledgeMap & /*records*/,
23  const transport::TransportContext & transport_context,
24  knowledge::Variables & vars)
25 {
26  if (!initialized_)
27  {
28  peers_.set_name (prefix_, vars);
29  initialized_ = true;
30  }
31 
32  std::string originator (transport_context.get_originator ());
33  Integer cur_time = (Integer)transport_context.get_current_time ();
34 
35  peers_.set (originator, cur_time);
36 
37  if (heart_beat_ > 0 && last_clear_ != cur_time)
38  {
39  std::vector <std::string> keys;
40  peers_.sync_keys ();
41 
42  peers_.keys (keys);
43 
44  for (size_t i = 0; i < keys.size (); ++i)
45  {
46  // if the current originator is old, erase it
47  if (cur_time - peers_[keys[i]].to_integer () > heart_beat_)
48  {
49  peers_.erase (keys[i]);
50  }
51  }
52  }
53 }
void keys(std::vector< std::string > &curkeys) const
Returns the keys within the map.
Definition: Map.cpp:516
madara::knowledge::KnowledgeRecord::Integer Integer
std::vector< std::string > sync_keys(void)
Syncs the keys from the knowledge base.
Definition: Map.cpp:225
Provides context about the transport.
void erase(const std::string &key)
Erases a variable from the map.
Definition: Map.cpp:397
virtual void filter(knowledge::KnowledgeMap &records, const transport::TransportContext &transport_context, knowledge::Variables &vars)
User-implementable method for performing a filter on network data.
int set(const std::string &key, madara::knowledge::KnowledgeRecord::Integer value=madara::knowledge::KnowledgeRecord::MODIFIED)
Sets a location within the map to the specified value.
Definition: Map.cpp:605
knowledge::KnowledgeRecord::Integer heart_beat_
The time to keep record of a peer.
Definition: PeerDiscovery.h:86
std::string prefix_
The context.
Definition: PeerDiscovery.h:76
static struct madara::knowledge::tags::string_t string
uint64_t get_current_time(void) const
Gets the current timestamp.
madara::knowledge::KnowledgeRecord::Integer Integer
void set_name(const std::string &var_name, KnowledgeBase &knowledge, bool sync=true)
Sets the variable name that this refers to.
Definition: Map.cpp:415
::std::map< std::string, KnowledgeRecord > KnowledgeMap
PeerDiscovery(const std::string &prefix=".peers", knowledge::KnowledgeRecord::Integer heart_beat=-1)
Constructor.
knowledge::KnowledgeRecord::Integer last_clear_
The time of the last clear of the peer_list.
Definition: PeerDiscovery.h:91
knowledge::containers::Map peers_
A map of discovered peers.
Definition: PeerDiscovery.h:81
Provides utility functions and classes for common tasks and needs.
Definition: IteratorImpl.h:14
const std::string & get_originator(void) const
Returns the current message originator.
virtual ~PeerDiscovery()
Destructor.
Provides an interface for external functions into the MADARA KaRL variable settings.
bool initialized_
Tracks if the peers_ map has been initialized.
Definition: PeerDiscovery.h:71