Jpp  18.5.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Functions
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

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 }
Utility class to parse command line options.
Definition: JParser.hh:1514
std::vector< event_type > data_type
Definition: JPerth.cc:81
The template JSinglePointer class can be used to hold a pointer to an object.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1989
#define ERROR(A)
Definition: JMessage.hh:66
#define FATAL(A)
Definition: JMessage.hh:67
Object iteration through ControlHost.
then fatal Wrong number of arguments fi set_variable DETECTOR $argv[1] set_variable INPUT_FILE $argv[2] eval JPrintDetector a $DETECTOR O IDENTIFIER eval JPrintDetector a $DETECTOR O SUMMARY JAcoustics sh $DETECTOR_ID source JAcousticsToolkit sh CHECK_EXIT_CODE typeset A EMITTERS get_tripods $WORKDIR tripod txt EMITTERS get_transmitters $WORKDIR transmitter txt EMITTERS for EMITTER in
Definition: JCanberra.sh:48
Implemenation of object output through ControlHost.
Data structure for measured coincidence rates of all pairs of PMTs in optical module.
Definition: JFitK40.hh:99
int debug
debug level
#define DEBUG(A)
Message macros.
Definition: JMessage.hh:62