Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JDistributer.cc
Go to the documentation of this file.
1#include <string>
2#include <iostream>
3#include <iomanip>
4#include <vector>
5
7#include "JDAQ/JDAQEventIO.hh"
9
10#include "JDAQ/JDAQTags.hh"
14
15#include "Jeep/JParser.hh"
16#include "Jeep/JMessage.hh"
17
18
19/**
20 * \file
21 *
22 * Example program to distribute data through control host.
23 * \author gmaggi
24 */
25int main(int argc, char* argv[])
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}
Fixed parameters and ControlHost tags for KM3NeT DAQ.
int main(int argc, char *argv[])
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
virtual const pointer_type & next() override
Get next element.
virtual bool hasNext() override
Check availability of next element.
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