DDS  ver. 3.6
IntercomServiceCore.h
Go to the documentation of this file.
1 // Copyright 2014 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 #ifndef DDS_INTERCOM_SERVICE_CORE_H
6 #define DDS_INTERCOM_SERVICE_CORE_H
7 // DDS
8 #include "AgentChannel.h"
9 #include "ConditionEvent.h"
10 #include "IntercomErrorCodes.h"
11 #include "SMAgentChannel.h"
12 // STD
13 #include <string>
14 #include <vector>
15 // BOOST
16 #include <boost/signals2/signal.hpp>
17 
18 namespace dds
19 {
20  namespace internal_api
21  {
22  // Key-value types
24  typedef boost::signals2::signal<void(
25  const std::string& /*_propertyName*/, const std::string& /*_value*/, uint64_t /*_senderTaskID*/)>
28  typedef boost::signals2::signal<void(uint64_t /*_taskID*/, uint32_t /*_exitCode*/)> keyValueTaskDoneSignal_t;
29 
30  // Custom command types
32  typedef boost::signals2::signal<void(
33  const std::string& /*_command*/, const std::string& /*_condition*/, uint64_t /*_senderID*/)>
35  typedef boost::signals2::signal<void(const std::string&)> customCmdReplySignal_t;
36 
37  typedef boost::signals2::connection connection_t;
38 
40  {
41  public:
42  using ptr_t = std::shared_ptr<CIntercomServiceCore>;
43 
44  public:
47 
48  // Disable copy constructors and assignment operators
53 
54  connection_t connectError(intercom_api::errorSignal_t::slot_function_type _subscriber);
55  connection_t connectCustomCmd(customCmdSignal_t::slot_function_type _subscriber);
56  connection_t connectCustomCmdReply(customCmdReplySignal_t::slot_function_type _subscriber);
57  connection_t connectKeyValue(keyValueSignal_t::slot_function_type _subscriber);
58  connection_t connectKeyValueTaskDone(keyValueTaskDoneSignal_t::slot_function_type _subscriber);
59  void disconnectCustomCmd();
60  void disconnectKeyValue();
61 
62  void sendCustomCmd(const std::string& _command, const std::string& _condition);
63  void putValue(const std::string& _key, const std::string& _value);
64 
65  // Remove shared memory
66  static void clean();
67 
68  void waitCondition();
69  void stopCondition();
70 
71  void start(const std::string& _sessionID);
72  void stop();
73 
74  private:
75  // Messages from TCP and shared memory channels
76  void on_cmdUPDATE_KEY_SM(
77  const protocol_api::SSenderInfo& _sender,
79  void on_cmdUSER_TASK_DONE_SM(
80  const protocol_api::SSenderInfo& _sender,
82  void on_cmdCUSTOM_CMD_SM(
83  const protocol_api::SSenderInfo& _sender,
85  void on_cmdSIMPLE_MSG_SM(
86  const protocol_api::SSenderInfo& _sender,
88 
89  void setupSMChannel();
90  void setupChannel(const std::string& _sessionID);
91 
92  template <class Signal_t, typename... Args>
93  void execUserSignal(Signal_t& _signal, Args&&... args)
94  {
95  try
96  {
97  _signal(args...);
98  }
99  catch (std::exception& _e)
100  {
101  std::string msg("Exception in user code: ");
102  msg += _e.what();
103  if (!std::is_same<Signal_t, intercom_api::errorSignal_t>::value)
104  {
105  execUserSignal(m_errorSignal, intercom_api::EErrorCode::UserCodeException, msg);
106  }
107  LOG(dds::misc::error) << msg;
108  }
109  }
110 
111  private:
112  // Signals
113  intercom_api::errorSignal_t m_errorSignal;
114  keyValueSignal_t m_keyValueUpdateSignal;
115  keyValueTaskDoneSignal_t m_keyValueTaskDoneSignal;
116  customCmdSignal_t m_customCmdSignal;
117  customCmdReplySignal_t m_customCmdReplySignal;
118 
119  boost::asio::io_context m_io_context;
120  boost::thread_group m_workerThreads;
123  std::atomic<bool> m_started;
124 
130  dds::misc::CConditionEvent m_waitCondition;
131  };
132  } // namespace internal_api
133 } // namespace dds
134 
135 #endif
std::shared_ptr< CAgentChannel > connectionPtr_t
Definition: BaseChannelImpl.h:229
boost::signals2::signal< void(uint64_t, uint32_t)> keyValueTaskDoneSignal_t
Definition: IntercomServiceCore.h:28
Definition: BaseEventHandlersImpl.h:48
boost::signals2::signal< void(const std::string &, const std::string &, uint64_t)> customCmdSignal_t
Definition: IntercomServiceCore.h:34
boost::signals2::signal< void(const std::string &)> customCmdReplySignal_t
Definition: IntercomServiceCore.h:35
connection_t connectKeyValue(keyValueSignal_t::slot_function_type _subscriber)
Definition: IntercomServiceCore.cpp:243
connection_t connectKeyValueTaskDone(keyValueTaskDoneSignal_t::slot_function_type _subscriber)
Definition: IntercomServiceCore.cpp:248
void waitCondition()
Definition: IntercomServiceCore.cpp:406
std::shared_ptr< SEmptyCmd > ptr_t
Definition: CommandAttachmentImpl.h:64
~CIntercomServiceCore()
Definition: IntercomServiceCore.cpp:34
Helper class for conditional events.
Definition: ConditionEvent.h:17
Exception in the user code.
Definition: IntercomErrorCodes.h:27
#define LOG(severity)
Definition: Logger.h:34
static void clean()
Definition: IntercomServiceCore.cpp:395
connection_t connectCustomCmd(customCmdSignal_t::slot_function_type _subscriber)
Definition: IntercomServiceCore.cpp:233
Definition: IntercomServiceCore.h:39
std::shared_ptr< CSMAgentChannel > connectionPtr_t
Definition: BaseSMChannelImpl.h:188
boost::signals2::signal< void(const std::string &, const std::string &, uint64_t)> keyValueSignal_t
Definition: IntercomServiceCore.h:26
Miscellaneous functions and helpers are located here.
Definition: AgentConnectionManager.h:13
CIntercomServiceCore()
Definition: IntercomServiceCore.cpp:20
void disconnectKeyValue()
Definition: IntercomServiceCore.cpp:262
std::shared_ptr< CIntercomServiceCore > ptr_t
Definition: IntercomServiceCore.h:42
void stopCondition()
Definition: IntercomServiceCore.cpp:417
void sendCustomCmd(const std::string &_command, const std::string &_condition)
Definition: IntercomServiceCore.cpp:323
void putValue(const std::string &_key, const std::string &_value)
Definition: IntercomServiceCore.cpp:364
boost::signals2::connection connection_t
Definition: IntercomServiceCore.h:37
void disconnectCustomCmd()
Definition: IntercomServiceCore.cpp:253
void stop()
Definition: IntercomServiceCore.cpp:204
connection_t connectError(intercom_api::errorSignal_t::slot_function_type _subscriber)
Definition: IntercomServiceCore.cpp:228
connection_t connectCustomCmdReply(customCmdReplySignal_t::slot_function_type _subscriber)
Definition: IntercomServiceCore.cpp:238
Definition: def.h:149
boost::signals2::signal< void(EErrorCode, const std::string &)> errorSignal_t
Definition: IntercomErrorCodes.h:30
CIntercomServiceCore & operator=(const CIntercomServiceCore &)=delete
void start(const std::string &_sessionID)
Definition: IntercomServiceCore.cpp:38