DDS  ver. 3.6
ConnectionManager.h
Go to the documentation of this file.
1 // Copyright 2014 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 #ifndef __DDS__ConnectionManager__
6 #define __DDS__ConnectionManager__
7 // DDS
8 #include "AgentChannel.h"
9 #include "ConditionEvent.h"
10 #include "ConnectionManagerImpl.h"
11 #include "Options.h"
12 #include "Scheduler.h"
13 #include "ToolsProtocol.h"
14 #include "TopoCore.h"
15 #include "UIChannelInfo.h"
16 // STD
17 #include <mutex>
18 
19 namespace dds
20 {
21  namespace commander_cmd
22  {
23  class CConnectionManager : public protocol_api::CConnectionManagerImpl<CAgentChannel, CConnectionManager>,
24  public std::enable_shared_from_this<CConnectionManager>
25  {
26  public:
27  CConnectionManager(const SOptions_t& _options);
28 
30 
31  public:
33  void _start();
34  void _stop();
35  void _createInfoFile(const std::vector<size_t>& _ports) const;
36  void _deleteInfoFile() const;
37 
38  private:
39  void on_cmdBINARY_ATTACHMENT_RECEIVED(
40  const protocol_api::SSenderInfo& _sender,
43  void on_cmdTRANSPORT_TEST(
44  const protocol_api::SSenderInfo& _sender,
47  void on_cmdREPLY(const protocol_api::SSenderInfo& _sender,
50  void on_cmdUPDATE_KEY(const protocol_api::SSenderInfo& _sender,
53  void on_cmdUSER_TASK_DONE(
54  const protocol_api::SSenderInfo& _sender,
57  void on_cmdGET_PROP_LIST(
58  const protocol_api::SSenderInfo& _sender,
61  void on_cmdGET_PROP_VALUES(
62  const protocol_api::SSenderInfo& _sender,
65  void on_cmdREPLY_ID(const protocol_api::SSenderInfo& _sender,
68  void on_cmdCUSTOM_CMD(const protocol_api::SSenderInfo& _sender,
71 
72  private:
73  template <protocol_api::ECmdType _cmd, class... Args>
74  void broadcastUpdateTopologyAndWait(weakChannelInfo_t::container_t agents,
76  const std::string& _msg,
77  Args&&... args);
78  template <protocol_api::ECmdType _cmd>
79  void broadcastUpdateTopologyAndWait_impl(size_t index, weakChannelInfo_t _agent);
80  template <protocol_api::ECmdType _cmd>
81  void broadcastUpdateTopologyAndWait_impl(
82  size_t index,
83  weakChannelInfo_t _agent,
85  template <protocol_api::ECmdType _cmd>
86  void broadcastUpdateTopologyAndWait_impl(size_t index,
87  weakChannelInfo_t _agent,
88  const std::string& _filePath,
89  const std::string& _filename);
90  template <protocol_api::ECmdType _cmd>
91  void broadcastUpdateTopologyAndWait_impl(size_t index,
92  weakChannelInfo_t _agent,
93  const std::vector<std::string>& _filePaths,
94  const std::vector<std::string>& _filenames);
95  template <protocol_api::ECmdType _cmd>
96  void broadcastUpdateTopologyAndWait_impl(
97  size_t index,
98  weakChannelInfo_t _agent,
99  const std::vector<typename protocol_api::SCommandAttachmentImpl<_cmd>::ptr_t>& _attachments);
100 
101  void activateTasks(const dds::tools_api::STopologyRequestData& _topologyInfo,
102  const CScheduler& _scheduler,
104  void _createWnPkg(bool _needInlineBashScript, bool _lightweightPkg, uint32_t _nSlots) const;
105  void processToolsAPIRequests(const protocol_api::SCustomCmdCmd& _cmd,
107  void submitAgents(const dds::tools_api::SSubmitRequestData& _submitInfo,
109  void updateTopology(const dds::tools_api::STopologyRequestData& _topologyInfo,
111  void getLog(const dds::tools_api::SGetLogRequestData& _getLog, CAgentChannel::weakConnectionPtr_t _channel);
112  void sendToolsAPIMsg(CAgentChannel::weakConnectionPtr_t _channel,
113  dds::tools_api::requestID_t _requestID,
114  const std::string& _msg,
115  intercom_api::EMsgSeverity _severity);
116  void sendUICommanderInfo(const dds::tools_api::SCommanderInfoRequestData& _info,
118  void sendUIAgentInfo(const dds::tools_api::SAgentInfoRequestData& _info,
120  void sendUISlotInfo(const dds::tools_api::SSlotInfoRequestData& _info,
122  void sendUIAgentCount(const dds::tools_api::SAgentCountRequestData& _info,
124 
125  void sendCustomCommandResponse(CAgentChannel::weakConnectionPtr_t _channel, const std::string& _json) const;
126  void sendDoneResponse(CAgentChannel::weakConnectionPtr_t _channel, tools_api::requestID_t _requestID) const;
127  void executeAgentCommand(const dds::tools_api::SAgentCommandRequestData& _info,
129 
130  private:
131  CGetLogChannelInfo m_getLog;
132  CTestChannelInfo m_transportTest;
133  CUpdateTopologyChannelInfo m_updateTopology;
134  CSubmitAgentsChannelInfo m_SubmitAgents;
136 
137  // TODO: This is temporary storage only. Store this information as a part of scheduler.
138  typedef std::map<uint64_t, weakChannelInfo_t> TaskIDToAgentChannelMap_t;
139  TaskIDToAgentChannelMap_t m_taskIDToAgentChannelMap;
140  std::mutex m_mapMutex;
141 
142  dds::misc::CConditionEvent m_updateTopoCondition;
143 
144  // ToolsAPI's onTaskDone subscribers
145  typedef std::pair<CAgentChannel::weakConnectionPtr_t, dds::tools_api::SOnTaskDoneRequestData>
146  onTaskDoneSubscriberInfo_t;
147  typedef std::list<onTaskDoneSubscriberInfo_t> weakConnectionPtrList_t;
148  weakConnectionPtrList_t m_onTaskDoneSubscribers;
149  std::mutex m_mtxOnTaskDoneSubscribers;
150  };
151  } // namespace commander_cmd
152 } // namespace dds
153 #endif /* defined(__DDS__ConnectionManager__) */
void _start()
Definition: ConnectionManager.cpp:43
std::shared_ptr< CAgentChannel > connectionPtr_t
Definition: BaseChannelImpl.h:229
SWeakChannelInfo< CAgentChannel > weakChannelInfo_t
Definition: ConnectionManagerImpl.h:41
Definition: BaseEventHandlersImpl.h:48
void _stop()
Definition: ConnectionManager.cpp:65
Structure holds information of agentCommand request.
Definition: ToolsProtocol.h:337
Definition: Scheduler.h:20
std::shared_ptr< SEmptyCmd > ptr_t
Definition: CommandAttachmentImpl.h:64
void _createInfoFile(const std::vector< size_t > &_ports) const
Definition: ConnectionManager.cpp:171
Definition: UIChannelInfo.h:249
Definition: UIChannelInfo.h:288
Helper class for conditional events.
Definition: ConditionEvent.h:17
Definition: ConnectionManager.h:23
std::weak_ptr< CAgentChannel > weakConnectionPtr_t
Definition: BaseChannelImpl.h:230
CConnectionManager(const SOptions_t &_options)
Definition: ConnectionManager.cpp:33
uint64_t requestID_t
Definition: ToolsProtocolCore.h:136
Definition: UIChannelInfo.h:338
Structure holds information of a submit request.
Definition: ToolsProtocol.h:78
Miscellaneous functions and helpers are located here.
Definition: AgentConnectionManager.h:13
void newClientCreated(CAgentChannel::connectionPtr_t _newClient)
Definition: ConnectionManager.cpp:69
Definition: TopoCore.h:25
dds-commander's container of options
Definition: dds-commander/src/Options.h:23
Definition: CustomCmdCmd.h:14
EMsgSeverity
Enumeration with message severity.
Definition: Intercom.h:126
void _deleteInfoFile() const
Definition: ConnectionManager.cpp:207
~CConnectionManager()
Definition: ConnectionManager.cpp:39
Structure holds information of topology request.
Definition: ToolsProtocol.h:106
Base class for connection managers.
Definition: ConnectionManagerImpl.h:37
std::vector< SWeakChannelInfo > container_t
Definition: ChannelInfo.h:52
Definition: UIChannelInfo.h:391
ECmdType
Definition: ProtocolCommands.h:25