1 #include "daq/slc/nsm/NSMNodeDaemon.h"
3 #include "daq/slc/nsm/NSMCommunicator.h"
4 #include "daq/slc/base/TimeoutException.h"
6 #include <daq/slc/system/LogFile.h>
7 #include <daq/slc/system/Time.h>
9 #include <daq/slc/base/StringUtil.h>
10 #include <daq/slc/base/ConfigFile.h>
19 const std::string& host,
int port)
22 if (callback != NULL && host.size() > 0 && port > 0) {
24 NSMNode& node(callback->getNode());
25 com->init(node, host, port);
26 com->setCallback(callback);
28 callback->alloc_open(*com);
29 m_timeout = callback->getTimeout();
30 if (callback->getLogNode().getName().size() == 0) {
32 callback->setLogNode(
NSMNode(file.get(
"log.collector")));
34 m_callback.push_back(callback);
36 }
catch (
const std::exception& e) {
37 LogFile::fatal(
e.what());
42 void NSMNodeDaemon::run()
44 NSMCommunicatorList& com_v(NSMCommunicator::get());
47 std::string nodename = com_v[0]->getCallback().getNode().getName();
48 std::string
filename = (
"/tmp/nsmvget." + StringUtil::tolower(nodename));
50 std::vector<std::string> nodes, vnames;
51 std::string node, vname;
52 while (fin >> node >> vname) {
53 nodes.push_back(node);
54 vnames.push_back(vname);
57 for (
size_t i = 0; i < com_v.size(); i++) {
59 for (
size_t j = 0; j < nodes.size(); j++) {
60 com.getCallback().vget(nodes[j], vnames[j]);
64 double t0 =
Time().get();
68 com.getCallback().perform(com);
70 for (
size_t i = 0; i < com_v.size(); i++) {
72 while (com.hasQueue()) {
73 com.setMessage(com.popQueue());
74 com.getCallback().perform(com);
77 double t =
Time().get();
78 if (t - t0 >= m_timeout) {
79 for (
size_t i = 0; i < com_v.size(); i++) {
81 com.getCallback().timeout(com);
82 com.getCallback().alloc_open(com);
87 }
catch (
const std::exception& e) {
88 LogFile::fatal(
"NSM node brdge : Caught exception %s\n"
89 "Terminate process...",
e.what());
91 for (
size_t i = 0; i < com_v.size(); i++) {
93 com.getCallback().term();