Motorcortex Core  version: 2.7.6
cm_groupmanager.h
1 /*
2  * Developer : Alexey Zakharov (alexey.zakharov@vectioneer.com)
3  * All rights reserved. Copyright (c) 2016 VECTIONEER.
4  */
5 
6 #ifndef CM_GROUPMANAGER_H
7 #define CM_GROUPMANAGER_H
8 
9 #include "motorcortex.pb.h"
10 
11 #include <atomic>
12 #include <ctime>
13 #include <map>
14 #include <mutex>
15 #include <set>
16 #include <string>
17 #include <vector>
18 
19 #include "utl_timer.h"
20 
21 namespace mcx {
22 
23 namespace parameter_server {
24 class Parameter;
25 }
26 
27 namespace comm {
28 
29 constexpr auto MAX_PARAM_NUMBER_IN_GROUP = 512;
30 constexpr auto TIMESTAMP_SIZE = sizeof(utils::Timespec64);
31 
33  uint32_t id;
35  uint32_t data_type;
36  uint32_t index;
37  uint32_t offset;
38  uint64_t size;
39  uint32_t status;
40  uint32_t frame_counter;
41 };
42 
43 typedef std::vector<ParameterContainer> ParameterMap;
44 
46  uint32_t id;
47  uint32_t counter;
48  uint32_t frq_divider;
49  uint32_t total_size;
50  ParameterMap params;
51  std::set<uint32_t> subs;
52 };
53 typedef std::map<std::string, GroupContainer> GroupMap;
54 
55 class GroupManager {
56 public:
57  GroupManager();
58 
59  void init(parameter_server::Parameter* root);
60 
61  GroupManager(const GroupManager& orig) = delete;
62 
63  virtual ~GroupManager();
64 
65  bool createGroup(const motorcortex_CreateGroupMsg& create_group_msg, uint32_t client_id,
66  motorcortex_GroupStatusMsg& group_status);
67 
68  bool removeGroup(const char* alias, uint32_t client_id);
69 
70  bool removeSubscriber(uint32_t client_id);
71 
72  bool getGroupMap(long& old_counter_value, GroupMap& groups) const;
73 
74  void setExtraSize(unsigned int n_bytes);
75 
76  unsigned int getExtraSize() const;
77 
78 private:
79  bool removeGroupRoutine(GroupMap::iterator& group_itr, uint32_t client_id);
80 
82  GroupMap groups_;
83  uint32_t groups_running_counter_;
84  mutable std::mutex groups_access_mutex_;
85  std::atomic<long> groups_update_counter_{};
86  unsigned int extra_size_bytes_;
87 };
88 
89 } // namespace comm
90 
91 } // namespace mcx
92 
93 #endif /*CM_GROUPMANAGER_H*/
mcx::comm::GroupManager
Definition: cm_groupmanager.h:55
mcx::comm::ParameterContainer
Definition: cm_groupmanager.h:32
mcx::parameter_server::Parameter
Definition: ps_parameter.h:45
_motorcortex_GroupStatusMsg
Definition: motorcortex.pb.h:345
_motorcortex_CreateGroupMsg
Definition: motorcortex.pb.h:174
mcx::comm::GroupContainer
Definition: cm_groupmanager.h:45