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