artdaq  v3_02_00
NetMonTransportService.h
1 #ifndef artdaq_ArtModules_NetMonTransportService_h
2 #define artdaq_ArtModules_NetMonTransportService_h
3 
4 #include "art/Framework/Services/Registry/ServiceMacros.h"
5 
6 #include "artdaq/ArtModules/NetMonTransportServiceInterface.h"
7 #include "artdaq/DAQrate/DataSenderManager.hh"
8 #include "artdaq-core/Core/SharedMemoryEventReceiver.hh"
9 
10 // ----------------------------------------------------------------------
11 
17 {
18 public:
19  struct Config
20  {
21  fhicl::Atom<uint32_t> shared_memory_key{ fhicl::Name{"shared_memory_key"},fhicl::Comment{"Key to use when connecting to shared memory. Will default to 0xBEE70000 + getppid()."},0xBEE70000 };
22  fhicl::Atom<uint32_t> broadcast_shared_memory_key{ fhicl::Name{ "broadcast_shared_memory_key" },fhicl::Comment{ "Key to use when connecting to broadcast shared memory. Will default to 0xCEE70000 + getppid()."},0xCEE70000 };
23  fhicl::Atom<int> rank{ fhicl::Name{"rank"}, fhicl::Comment{"Rank of this artdaq application. Used for data transfers"} };
24  fhicl::Atom<double> init_fragment_timeout{ fhicl::Name{"init_fragment_timeout_seconds"}, fhicl::Comment{"Amount of time to wait, in seconds, for init Fragment to arrive"}, 1.0 };
25  fhicl::TableFragment<artdaq::DataSenderManager::Config> dataSenderConfig;
26  };
27 #if MESSAGEFACILITY_HEX_VERSION >= 0x20103
28  using Parameters = fhicl::WrappedTable<Config>;
29 #endif
30 
31 
35  virtual ~NetMonTransportService();
36 
46  NetMonTransportService(fhicl::ParameterSet const& pset, art::ActivityRegistry&);
47 
53  void connect() override;
54 
60  void disconnect() override;
61 
65  void listen() override;
66 
73  void sendMessage(uint64_t sequenceId, uint8_t messageType, TBufferFile& msg) override;
74 
79  void receiveMessage(TBufferFile*& msg) override;
80 
81  void receiveInitMessage(TBufferFile*& msg) override;
82 
87  size_t dataReceiverCount() const { return sender_ptr_->destinationCount(); }
88 private:
89  fhicl::ParameterSet data_pset_;
90  bool init_received_;
91  double init_timeout_s_;
92 
93  std::unique_ptr<artdaq::DataSenderManager> sender_ptr_;
94  std::unique_ptr<artdaq::SharedMemoryEventReceiver> incoming_events_;
95  std::unique_ptr<std::vector<artdaq::Fragment>> recvd_fragments_;
96 };
97 
98 DECLARE_ART_SERVICE_INTERFACE_IMPL(NetMonTransportService, NetMonTransportServiceInterface, LEGACY)
99 #endif /* artdaq_ArtModules_NetMonTransportService_h */
100 
101 // Local Variables:
102 // mode: c++
103 // End:
void receiveInitMessage(TBufferFile *&msg) override
Receive the init message.
void sendMessage(uint64_t sequenceId, uint8_t messageType, TBufferFile &msg) override
Send ROOT data, wrapped in an artdaq::Fragment object.
NetMonTransportService extends NetMonTransportServiceInterface. It sends events using DataSenderManag...
void receiveMessage(TBufferFile *&msg) override
Receive data from the ConcurrentQueue.
size_t dataReceiverCount() const
Get the number of data receivers.
void connect() override
Reconnect the NetMonTransportService.
virtual ~NetMonTransportService()
NetMonTransportService Destructor. Calls disconnect().
NetMonTransportService(fhicl::ParameterSet const &pset, art::ActivityRegistry &)
NetMonTransportService Constructor.
void disconnect() override
Disconnects the NetMonTranportService.
Interface for NetMonTranportService. This interface is declared to art as part of the required regist...
void listen() override
Listen for connections. This method is a No-Op.