DDS  ver. 1.6
DDSIntercomGuard.h
Go to the documentation of this file.
1 // Copyright 2014 GSI, Inc. All rights reserved.
2 //
3 //
4 //
5 #ifndef DDSINTERCOMGUARD_H
6 #define DDSINTERCOMGUARD_H
7 // DDS
9 #include "SMAgentChannel.h"
11 // STD
12 #include <string>
13 #include <vector>
14 // BOOST
15 #include <boost/signals2/signal.hpp>
16 
17 namespace dds
18 {
19  namespace internal_api
20  {
21  // Key-value types
23  typedef boost::signals2::signal<void(
24  const std::string& /*_propertyID*/, const std::string& /*_key*/, const std::string& /*_value*/)>
27  typedef boost::signals2::signal<void(const std::string& /*_propertyID*/, const std::string& /*_key*/)>
29 
30  // Custom command typeŃ‹
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  // key -> SUpdateKeyCmd::version_t command
42  typedef std::map<std::string, protocol_api::SUpdateKeyCmd::version_t> updateKeyCache_t;
43 
44  // key -> value
45  typedef std::map<std::string, std::string> putValueCache_t;
46 
47  private:
50 
51  public:
52  static CDDSIntercomGuard& instance();
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 connectKeyValueDelete(keyValueDeleteSignal_t::slot_function_type _subscriber);
59  void disconnectCustomCmd();
60  void disconnectKeyValue();
61 
63 
64  // Messages from shared memory
75 
76  void sendCustomCmd(const std::string& _command, const std::string& _condition);
77  void putValue(const std::string& _key, const std::string& _value);
78 
79  // Remove shared memory
80  static void clean();
81 
82  void waitCondition();
83  void stopCondition();
84 
85  void start();
86  void stop();
87 
88  void initAgentConnection();
89 
90  public:
91  // Signals for subscriptions
96  customCmdReplySignal_t m_customCmdReplySignal;
97 
98  private:
99  CAgentConnectionManager::ptr_t m_agentConnectionMng;
100  std::mutex m_initAgentConnectionMutex;
101 
102  updateKeyCache_t m_updateKeyCache;
103  std::mutex m_updateKeyCacheMutex;
104 
105  putValueCache_t m_putValueCache;
106  std::mutex m_putValueCacheMutex;
107 
109 
110  bool m_useSMTransport;
111  bool m_started;
112  };
113  }
114 }
115 
116 #endif
Definition: UpdateKeyCmd.h:14
boost::signals2::signal< void(const std::string &, const std::string &, uint64_t)> customCmdSignal_t
Definition: DDSIntercomGuard.h:34
boost::signals2::signal< void(const std::string &)> customCmdReplySignal_t
Definition: DDSIntercomGuard.h:35
boost::signals2::signal< void(const std::string &, const std::string &)> keyValueDeleteSignal_t
Definition: DDSIntercomGuard.h:28
void stopCondition()
Definition: DDSIntercomGuard.cpp:432
connection_t connectKeyValue(keyValueSignal_t::slot_function_type _subscriber)
Definition: DDSIntercomGuard.cpp:169
std::shared_ptr< SEmptyCmd > ptr_t
Definition: CommandAttachmentImpl.h:65
intercom_api::errorSignal_t m_errorSignal
Definition: DDSIntercomGuard.h:92
bool on_cmdUPDATE_KEY_ERROR_SM(protocol_api::SCommandAttachmentImpl< protocol_api::cmdUPDATE_KEY_ERROR >::ptr_t _attachment)
Definition: DDSIntercomGuard.cpp:240
bool on_cmdUPDATE_KEY_SM(protocol_api::SCommandAttachmentImpl< protocol_api::cmdUPDATE_KEY >::ptr_t _attachment)
Definition: DDSIntercomGuard.cpp:220
keyValueDeleteSignal_t m_keyValueDeleteSignal
Definition: DDSIntercomGuard.h:94
customCmdReplySignal_t m_customCmdReplySignal
Definition: DDSIntercomGuard.h:96
void disconnectCustomCmd()
Definition: DDSIntercomGuard.cpp:179
std::shared_ptr< CSMAgentChannel > connectionPtr_t
Definition: BaseSMChannelImpl.h:91
connection_t connectError(intercom_api::errorSignal_t::slot_function_type _subscriber)
Definition: DDSIntercomGuard.cpp:154
Definition: dds-agent/src/AgentConnectionManager.h:16
Definition: DDSIntercomGuard.h:39
customCmdSignal_t m_customCmdSignal
Definition: DDSIntercomGuard.h:95
boost::signals2::signal< void(const std::string &, const std::string &, const std::string &)> keyValueSignal_t
Definition: DDSIntercomGuard.h:25
static void clean()
Definition: DDSIntercomGuard.cpp:410
void disconnectKeyValue()
Definition: DDSIntercomGuard.cpp:188
boost::signals2::connection connection_t
Definition: DDSIntercomGuard.h:37
void waitCondition()
Definition: DDSIntercomGuard.cpp:420
bool on_cmdCUSTOM_CMD_SM(protocol_api::SCommandAttachmentImpl< protocol_api::cmdCUSTOM_CMD >::ptr_t _attachment)
Definition: DDSIntercomGuard.cpp:279
static CDDSIntercomGuard & instance()
Definition: DDSIntercomGuard.cpp:51
bool updateCacheIfNeeded(const protocol_api::SUpdateKeyCmd &_cmd)
Definition: DDSIntercomGuard.cpp:196
void sendCustomCmd(const std::string &_command, const std::string &_condition)
Definition: DDSIntercomGuard.cpp:314
std::shared_ptr< CAgentConnectionManager > ptr_t
Definition: dds-intercom-lib/src/AgentConnectionManager.h:23
connection_t connectCustomCmdReply(customCmdReplySignal_t::slot_function_type _subscriber)
Definition: DDSIntercomGuard.cpp:164
void putValue(const std::string &_key, const std::string &_value)
Definition: DDSIntercomGuard.cpp:364
connection_t connectCustomCmd(customCmdSignal_t::slot_function_type _subscriber)
Definition: DDSIntercomGuard.cpp:159
bool on_cmdSIMPLE_MSG_SM(protocol_api::SCommandAttachmentImpl< protocol_api::cmdSIMPLE_MSG >::ptr_t _attachment)
Definition: DDSIntercomGuard.cpp:287
keyValueSignal_t m_keyValueUpdateSignal
Definition: DDSIntercomGuard.h:93
void stop()
Definition: DDSIntercomGuard.cpp:138
boost::signals2::signal< void(EErrorCode, const std::string &)> errorSignal_t
Definition: dds_intercom_error_codes.h:27
bool on_cmdDELETE_KEY_SM(protocol_api::SCommandAttachmentImpl< protocol_api::cmdDELETE_KEY >::ptr_t _attachment)
Definition: DDSIntercomGuard.cpp:265
connection_t connectKeyValueDelete(keyValueDeleteSignal_t::slot_function_type _subscriber)
Definition: DDSIntercomGuard.cpp:174
void start()
Definition: DDSIntercomGuard.cpp:57