00001 #include "mfextensions/Binaries/ReceiverManager.hh" 00002 00003 #include "mfextensions/Receivers/makeMVReceiver.hh" 00004 #include "fhiclcpp/ParameterSet.h" 00005 #include <iostream> 00006 00007 mfviewer::ReceiverManager::ReceiverManager(fhicl::ParameterSet pset) 00008 { 00009 qRegisterMetaType<qt_mf_msg>("qt_mf_msg"); 00010 std::vector<std::string> names = pset.get_pset_names(); 00011 for (auto name : names) 00012 { 00013 std::string pluginType = "unknown"; 00014 try 00015 { 00016 fhicl::ParameterSet plugin_pset = pset.get<fhicl::ParameterSet>(name); 00017 pluginType = plugin_pset.get<std::string>("receiverType", "unknown"); 00018 std::unique_ptr<mfviewer::MVReceiver> rcvr = makeMVReceiver(pluginType, plugin_pset); 00019 connect(rcvr.get(), SIGNAL(NewMessage(qt_mf_msg const &)), 00020 this, SLOT(onNewMessage(qt_mf_msg const &))); 00021 receivers_.push_back(std::move(rcvr)); 00022 } 00023 catch (...) 00024 { 00025 std::cerr << "ReceiverManager: Unable to load receiver plugin with name " << name << " and plugin type " << pluginType << std::endl; 00026 } 00027 } 00028 } 00029 00030 mfviewer::ReceiverManager::~ReceiverManager() 00031 { 00032 stop(); 00033 for (auto& i : receivers_) 00034 i.reset(nullptr); 00035 } 00036 00037 void mfviewer::ReceiverManager::stop() 00038 { 00039 for (auto& receiver : receivers_) 00040 { 00041 receiver->stop(); 00042 } 00043 for (auto& receiver : receivers_) 00044 { 00045 receiver->wait(); 00046 } 00047 } 00048 00049 void mfviewer::ReceiverManager::start() 00050 { 00051 for (auto& receiver : receivers_) 00052 { 00053 receiver->start(); 00054 } 00055 } 00056 00057 void mfviewer::ReceiverManager::onNewMessage(qt_mf_msg const& mfmsg) 00058 { 00059 emit newMessage(mfmsg); 00060 }