FairMQ  1.2.0
C++ Message Passing Framework
FairMQTransportFactorySHM.h
1 /********************************************************************************
2  * Copyright (C) 2016-2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *
3  * *
4  * This software is distributed under the terms of the *
5  * GNU Lesser General Public Licence (LGPL) version 3, *
6  * copied verbatim in the file "LICENSE" *
7  ********************************************************************************/
8 
9 #ifndef FAIRMQTRANSPORTFACTORYSHM_H_
10 #define FAIRMQTRANSPORTFACTORYSHM_H_
11 
12 #include <fairmq/shmem/Manager.h>
13 #include <fairmq/shmem/Common.h>
14 
15 #include "FairMQTransportFactory.h"
16 #include "FairMQMessageSHM.h"
17 #include "FairMQSocketSHM.h"
18 #include "FairMQPollerSHM.h"
19 #include "FairMQUnmanagedRegionSHM.h"
20 #include <options/FairMQProgOptions.h>
21 
22 #include <boost/interprocess/sync/named_mutex.hpp>
23 
24 #include <vector>
25 #include <string>
26 #include <thread>
27 #include <atomic>
28 
30 {
31  public:
32  FairMQTransportFactorySHM(const std::string& id = "", const FairMQProgOptions* config = nullptr);
34  FairMQTransportFactorySHM operator=(const FairMQTransportFactorySHM&) = delete;
35 
36  FairMQMessagePtr CreateMessage() const override;
37  FairMQMessagePtr CreateMessage(const size_t size) const override;
38  FairMQMessagePtr CreateMessage(void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr) const override;
39  FairMQMessagePtr CreateMessage(FairMQUnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0) const override;
40 
41  FairMQSocketPtr CreateSocket(const std::string& type, const std::string& name) const override;
42 
43  FairMQPollerPtr CreatePoller(const std::vector<FairMQChannel>& channels) const override;
44  FairMQPollerPtr CreatePoller(const std::vector<const FairMQChannel*>& channels) const override;
45  FairMQPollerPtr CreatePoller(const std::unordered_map<std::string, std::vector<FairMQChannel>>& channelsMap, const std::vector<std::string>& channelList) const override;
46  FairMQPollerPtr CreatePoller(const FairMQSocket& cmdSocket, const FairMQSocket& dataSocket) const override;
47 
48  FairMQUnmanagedRegionPtr CreateUnmanagedRegion(const size_t size, FairMQRegionCallback callback = nullptr) const override;
49 
50  FairMQ::Transport GetType() const override;
51 
52  void Interrupt() override { FairMQSocketSHM::Interrupt(); }
53  void Resume() override { FairMQSocketSHM::Resume(); }
54 
55  ~FairMQTransportFactorySHM() override;
56 
57  private:
58  void SendHeartbeats();
59  void StartMonitor();
60 
61  static FairMQ::Transport fTransportType;
62  std::string fDeviceId;
63  std::string fSessionName;
64  void* fContext;
65  std::thread fHeartbeatThread;
66  std::atomic<bool> fSendHeartbeats;
67  std::unique_ptr<boost::interprocess::named_mutex> fShMutex;
68  fair::mq::shmem::DeviceCounter* fDeviceCounter;
69  std::unique_ptr<fair::mq::shmem::Manager> fManager;
70 };
71 
72 #endif /* FAIRMQTRANSPORTFACTORYSHM_H_ */
FairMQSocketPtr CreateSocket(const std::string &type, const std::string &name) const override
Create a socket.
Definition: FairMQTransportFactorySHM.cxx:237
Definition: FairMQTransportFactorySHM.h:29
Definition: FairMQTransportFactory.h:27
FairMQMessagePtr CreateMessage() const override
Create empty FairMQMessage.
Definition: FairMQTransportFactorySHM.cxx:217
Definition: FairMQProgOptions.h:41
Definition: FairMQSocket.h:18
Definition: Common.h:22
FairMQ::Transport GetType() const override
Get transport type.
Definition: FairMQTransportFactorySHM.cxx:319
FairMQPollerPtr CreatePoller(const std::vector< FairMQChannel > &channels) const override
Create a poller for a single channel (all subchannels)