Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JDistributer.cc File Reference

Example program to distribute data through control host. More...

#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
#include "JDAQ/JDAQTimesliceIO.hh"
#include "JDAQ/JDAQEventIO.hh"
#include "JDAQ/JDAQSummarysliceIO.hh"
#include "JDAQ/JDAQTags.hh"
#include "JNet/JControlHostObjectIterator.hh"
#include "JNet/JControlHostObjectOutput.hh"
#include "JLang/JSinglePointer.hh"
#include "Jeep/JParser.hh"
#include "Jeep/JMessage.hh"

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

Detailed Description

Example program to distribute data through control host.

Author
gmaggi

Definition in file JDistributer.cc.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 25 of file JDistributer.cc.

26{
27 using namespace std;
28 using namespace JPP;
29 using namespace KM3NETDAQ;
30
31 string hostname;
32 vector<JHostname> destinations;
33 int debug;
34
35 try {
36
37 JParser<> zap("Example program to distribute data through control host.");
38
39 zap['H'] = make_field(hostname) = "localhost";
40 zap['D'] = make_field(destinations);
41 zap['d'] = make_field(debug) = 1;
42
43 zap(argc, argv);
44 }
45 catch(const exception &error) {
46 FATAL(error.what() << endl);
47 }
48
49
50 typedef JDAQEvent data_type;
51
52 if (destinations.empty()) {
53 FATAL("Destination is empty" << endl);
54 }
55
56
57 typedef JSinglePointer< JControlHostObjectOutput<data_type> > pointerHostObject_t;
58
60
61 for (vector<JHostname>::iterator i = destinations.begin(); !destinations.empty(); ) {
62
63 DEBUG("Connection " << *i << ' ' << flush);
64
65 try {
66
67 output.push_back(new JControlHostObjectOutput<data_type>(*i));
68
69 i = destinations.erase(i); // okay; remove destination
70
71 DEBUG("succeeded.");
72 }
73 catch(const exception& error) {
74 ++i; // skip; maintain destination
75 DEBUG("failed.");
76 }
77 DEBUG(endl);
78
79 if (i == destinations.end()) { // round robin
80 sleep(1);
81 i = destinations.begin();
82 }
83 }
84
85 vector<pointerHostObject_t>::iterator out = output.begin();
86
87 try {
88
90
91 while (in.hasNext()) {
92
93 data_type* p = in.next();
94
95 DEBUG("I got data " << endl);
96
97 try {
98 (*out)->put(*p);
99 ++out; // okay; maintain destination
100 }
101 catch(const exception& error) {
102 ERROR(error.what() << endl);
103 out = output.erase(out); // error; remove destination
104 }
105
106 if (out == output.end()) { // round robin
107 out = output.begin();
108 }
109 }
110 }
111 catch(const exception& error) {
112 ERROR(error.what() << endl);
113 }
114}
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
The template JSinglePointer class can be used to hold a pointer to an object.
Object iteration through ControlHost.
Implemenation of object output through ControlHost.
Utility class to parse command line options.
Definition JParser.hh:1698
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
std::vector< event_type > data_type
Definition JPerth.cc:81
KM3NeT DAQ data structures and auxiliaries.
Definition DataQueue.cc:39
Data structure for measured coincidence rates of all pairs of PMTs in optical module.
Definition JFitK40.hh:103