salsa  0.7.1
Distributor.hh
1 #pragma once
2 #include <map>
3 #include <json/json.h>
4 
5 #include "NodeInfo.pb.h"
6 #include "TaskInfo.pb.h"
7 #include "Socket.hh"
8 namespace Salsa {
17 class NodeManager;
18 
19 class Distributor : public Object {
20 public:
21  Distributor(std::string uuid, std::shared_ptr<Socket> pPipe, NodeManager * pNM);
22  virtual ~Distributor();
23 
25  std::string uuid() const;
26 
28  std::shared_ptr<Socket> pipe() const;
29 
31  void print() const;
32 
33  // TODO Client ops
34  void addClient(std::string uuid, std::string type);
35  void removeClient(std::string uuid);
36 
37  // TODO Other ops
38  void addOther(std::string uuid, std::string type);
39  void removeOther(std::string uuid);
40 
41  // TODO Get node info
42  NodeInfo * nodeInfo() const;
43 
45  virtual void onEnter(Message * pInMsg, std::vector<std::string> & out, std::string type);
46  virtual void onExit(Message * pInMsg, std::vector<std::string> & out);
47  virtual void onWhisper(Message * pInMsg, std::vector<std::string> & out);
48 
50  Json::Value jsonValueNodeInfo() const { return mJsonValue; }
51  virtual void upadateJsonValueNodeInfo();
52 
53 protected:
54  std::string mUUID{};
55  std::shared_ptr<Socket> mpPipe = nullptr;
56  std::map<std::string, std::string> mClients{};
57  std::map<std::string, std::string> mOthers{};
58  NodeManager * mpNodeManager = nullptr;
59  NodeInfo * mpNodeInfo{new NodeInfo()};
60  Json::Value mJsonValue;
61 
62  mutable TaskInfo mTaskInfoCache{};
63 };
64 } // namespace Salsa
Base Distributor class.
Definition: Distributor.hh:19
virtual void onWhisper(Message *pInMsg, std::vector< std::string > &out)
Definition: Distributor.cc:70
Json::Value jsonValueNodeInfo() const
Returns json value.
Definition: Distributor.hh:50
std::map< std::string, std::string > mClients
List of clients.
Definition: Distributor.hh:56
Json::Value mJsonValue
Node Info as json value.
Definition: Distributor.hh:60
NodeInfo * nodeInfo() const
Definition: Distributor.cc:92
std::map< std::string, std::string > mOthers
List of others.
Definition: Distributor.hh:57
void addClient(std::string uuid, std::string type)
Definition: Distributor.cc:18
virtual void upadateJsonValueNodeInfo()
Definition: Distributor.cc:100
std::string mUUID
Self UUID.
Definition: Distributor.hh:54
void removeClient(std::string uuid)
Definition: Distributor.cc:26
void print() const
TODO Prints distributor's state.
Definition: Distributor.cc:50
std::shared_ptr< Socket > mpPipe
Pipe for messages (net connector)
Definition: Distributor.hh:55
NodeManager * mpNodeManager
Node Manager.
Definition: Distributor.hh:58
virtual ~Distributor()
Definition: Distributor.cc:10
TaskInfo mTaskInfoCache
Task Info cache.
Definition: Distributor.hh:62
void addOther(std::string uuid, std::string type)
Definition: Distributor.cc:34
virtual void onEnter(Message *pInMsg, std::vector< std::string > &out, std::string type)
TODO Three horsemen of apocalypse.
Definition: Distributor.cc:58
void removeOther(std::string uuid)
Definition: Distributor.cc:42
virtual void onExit(Message *pInMsg, std::vector< std::string > &out)
Definition: Distributor.cc:64
std::shared_ptr< Socket > pipe() const
TODO Returns distributor's pipe?
Definition: Distributor.cc:77
NodeInfo * mpNodeInfo
Node Info.
Definition: Distributor.hh:59
std::string uuid() const
Returns distributor's UUID.
Definition: Distributor.cc:84
Distributor(std::string uuid, std::shared_ptr< Socket > pPipe, NodeManager *pNM)
Definition: Distributor.cc:3
Base Message class.
Definition: Message.hh:15
NodeManager class.
Definition: NodeManager.hh:22
Base Salsa Object class.
Definition: Object.hh:15