artdaq_mfextensions  v1_02_02
ReceiverManager.cc
1 #include "mfextensions/Binaries/ReceiverManager.hh"
2 
3 #include "mfextensions/Receivers/makeMVReceiver.hh"
4 #include "fhiclcpp/ParameterSet.h"
5 #include <iostream>
6 
7 mfviewer::ReceiverManager::ReceiverManager(fhicl::ParameterSet pset)
8 {
9  qRegisterMetaType<mf::MessageFacilityMsg>("mf::MessageFacilityMsg");
10  std::vector<std::string> names = pset.get_pset_names();
11  for (auto name : names)
12  {
13  std::string pluginType = "unknown";
14  try
15  {
16  fhicl::ParameterSet plugin_pset = pset.get<fhicl::ParameterSet>(name);
17  pluginType = plugin_pset.get<std::string>("receiverType", "unknown");
18  std::unique_ptr<mfviewer::MVReceiver> rcvr = makeMVReceiver(pluginType, plugin_pset);
19  connect(rcvr.get(), SIGNAL(NewMessage(mf::MessageFacilityMsg const &)),
20  this, SLOT(onNewMessage(mf::MessageFacilityMsg const &)));
21  receivers_.push_back(std::move(rcvr));
22  }
23  catch (...)
24  {
25  std::cerr << "ReceiverManager: Unable to load receiver plugin with name " << name << " and plugin type " << pluginType << std::endl;
26  }
27  }
28 }
29 
30 mfviewer::ReceiverManager::~ReceiverManager()
31 {
32  stop();
33  for (auto& i : receivers_)
34  i.reset(nullptr);
35 }
36 
37 void mfviewer::ReceiverManager::stop()
38 {
39  for (auto& receiver : receivers_)
40  {
41  receiver->stop();
42  }
43  for (auto& receiver : receivers_)
44  {
45  receiver->wait();
46  }
47 }
48 
49 void mfviewer::ReceiverManager::start()
50 {
51  for (auto& receiver : receivers_)
52  {
53  receiver->start();
54  }
55 }
56 
57 void mfviewer::ReceiverManager::onNewMessage(mf::MessageFacilityMsg const& mfmsg)
58 {
59  emit newMessage(mfmsg);
60 }