OpenDDS  Snapshot(2023/04/28-20:55)
ShmemTransport.h
Go to the documentation of this file.
1 /*
2  * Distributed under the OpenDDS License.
3  * See: http://www.opendds.org/license.html
4  */
5 
6 #ifndef OPENDDS_DCPS_TRANSPORT_SHMEM_SHMEMTRANSPORT_H
7 #define OPENDDS_DCPS_TRANSPORT_SHMEM_SHMEMTRANSPORT_H
8 
9 #include "Shmem_Export.h"
10 #include "ShmemAllocator.h"
11 #include "ShmemDataLink_rch.h"
12 #include "ShmemDataLink.h"
13 
15 #include <dds/DCPS/PoolAllocator.h>
16 #include <dds/DCPS/AtomicBool.h>
17 
18 #include <string>
19 
21 
22 namespace OpenDDS {
23 namespace DCPS {
24 
25 class ShmemInst;
26 
28 public:
29  explicit ShmemTransport(const ShmemInst_rch& inst);
30 
31  // used by our DataLink:
32  ShmemAllocator* alloc() { return alloc_.get(); }
33  std::string address();
34  void signal_semaphore();
35 
36  ShmemInst_rch config() const;
37 
38 protected:
39  virtual AcceptConnectResult connect_datalink(const RemoteTransport& remote,
40  const ConnectionAttribs& attribs,
41  const TransportClient_rch& client);
42 
43  virtual AcceptConnectResult accept_datalink(const RemoteTransport& remote,
44  const ConnectionAttribs& attribs,
45  const TransportClient_rch& client);
46 
47  virtual void stop_accepting_or_connecting(const TransportClient_wrch& client,
48  const GUID_t& remote_id,
49  bool disassociate,
50  bool association_failed);
51 
52  bool configure_i(const ShmemInst_rch& config);
53 
54  virtual void shutdown_i();
55 
56  virtual bool connection_info_i(TransportLocator& info, ConnectionInfoFlags flags) const;
57 
58  virtual void release_datalink(DataLink* link);
59 
60  virtual std::string transport_type() const { return "shmem"; }
61 
62 private:
63  /// Create the DataLink object and start it
64  ShmemDataLink_rch make_datalink(const std::string& remote_address);
65 
66  ShmemDataLink_rch get_or_make_datalink(const char* caller, const RemoteTransport& remote);
67 
68  std::pair<std::string, std::string> blob_to_key(const TransportBLOB& blob);
69 
70  void read_from_links(); // callback from ReadTask
71 
74 
75  LockType links_lock_;
76 
77  /// Map of fully associated DataLinks for this transport. Protected
78  /// by links_lock_.
79  typedef OPENDDS_MAP(std::string, ShmemDataLink_rch) ShmemDataLinkMap;
80  ShmemDataLinkMap links_;
81 
83 
84  class ReadTask : public ACE_Task_Base {
85  public:
86  ReadTask(ShmemTransport* outer, ACE_sema_t semaphore);
87  int svc();
88  void stop();
89  void signal_semaphore();
90 
91  private:
93  ACE_sema_t semaphore_;
95  };
97 };
98 
99 } // namespace DCPS
100 } // namespace OpenDDS
101 
103 
104 #endif /* OPENDDS_SHMEMTRANSPORT_H */
unique_ptr< ShmemAllocator > alloc_
ACE_Guard< LockType > GuardType
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
DDS::OctetSeq TransportBLOB
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
unique_ptr< ReadTask > read_task_
typedef OPENDDS_MAP(OPENDDS_STRING, OPENDDS_STRING) ValueMap
Helper types and functions for config file parsing.
#define OpenDDS_Shmem_Export
Definition: Shmem_Export.h:25
size_t ConnectionInfoFlags
virtual std::string transport_type() const