Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Static Public Attributes | Protected Attributes | Private Member Functions | Private Attributes | List of all members
KM3NETDAQ::JDAQClient Class Reference

Run control client base class. More...

#include <JDAQClient.hh>

Inheritance diagram for KM3NETDAQ::JDAQClient:
AcousticDataFilter JDAQDemoClient JDataFilter KM3NETDAQ::DataQueue KM3NETDAQ::JDAQDriver KM3NETDAQ::JDataWriter KM3NETDAQ::JDOMSimulator KM3NETDAQ::JEventGenerator KM3NETDAQ::MonitorRouter

Public Member Functions

 JDAQClient (const std::string &name)
 Constructor. More...
 
 JDAQClient (const std::string &name, const std::string &server, JLogger *logger, const int level)
 Constructor. More...
 
virtual bool enter (const JArgs &args)
 Enter the state machine. More...
 
virtual bool enter ()
 Enter the state machine. More...
 
virtual bool exit ()
 Exit the state machine. More...
 
const std::string & getFullName () const
 Get full name of this run control client. More...
 
const JNET::JTaggetUniqueTag () const
 Get unique tag of this run control client. More...
 
int getEventNumber () const
 Get last event number. More...
 
bool isRunning () const
 Check if this client is in runnig state. More...
 
void replaceEvent (const JNET::JTag &oldTag, const JNET::JTag &newTag, JDAQEvent_t &event)
 Replace tag of given event in event table. More...
 
JDAQEvent_tfindEvent (const JNET::JTag &tag, const std::string &event_name)
 Find event in event table. More...
 
template<class T >
void addParameter (const char option, T &parameter)
 Add parameter to parser used in method enter(). More...
 
template<class T >
void addParameter (const char option, T &parameter, const T &value)
 Add parameter to parser used in method enter(). More...
 
long long int getClockDelay () const
 Get total delay time. More...
 
const std::string & getHostname () const
 Get hostname. More...
 
long long int getClockInterval () const
 Get interval time. More...
 
void setClockInterval (const long long int interval_us)
 Set interval time. More...
 
void resetClock ()
 Reset clock. More...
 
void setSelect ()
 Set the file descriptor mask for the select call. More...
 
virtual void setSelect (JFileDescriptorMask &mask) const
 Set the file descriptor mask for the select call. More...
 
virtual void actionSelect (const JFileDescriptorMask &mask)
 Action method following last select call. More...
 
virtual void actionRunning ()
 This method is repeatedly called when this client machine is in state Running and the clock interval time is non-zero. More...
 
virtual void actionInput (int length, const char *buffer)
 This method is called at ev_input. More...
 
virtual bool filter (const std::string &tag, int length, const char *buffer)
 Filter message. More...
 
void run ()
 Run as run control client following command messages via JNET::JControlHost. More...
 
void run (const int port)
 Run for ever. More...
 
void run (std::istream &in)
 Run client with commands from input stream (e.g for debugging). More...
 

Static Public Attributes

static const int TIMEOUT_S = 1
 time out of update [s] More...
 

Protected Attributes

JSharedPointer< JControlHostserver
 message server More...
 
JMessageLogger logger
 message logger More...
 

Private Member Functions

void update ()
 Update state machine. More...
 
void update (const JNET::JTag &tag, int length, const char *buffer)
 Update state machine. More...
 
void configure ()
 Configure client. More...
 
void enterState (const CHSM::state &state, const CHSM::event &event)
 Action when entering state. More...
 
virtual void actionCheck (int length, const char *buffer)
 This method is called at ev_check and reports a system check by mimicing an enter state action. More...
 
void execute (action __action, const CHSM::event &__event)
 The method to execute the action. More...
 

Private Attributes

JEventTable eventTable
 event table More...
 
std::string hostname
 
std::string full_name
 
JNET::JTag unique_tag
 
JTimekeeper clock
 central clock More...
 
JSelectReader select
 select call More...
 
JParser parser
 parser method enter() More...
 
int event_number
 number of last event More...
 

Detailed Description

Run control client base class.

This base class implements the protocol for the communication with the central run control program. This protocol is based on JNET::JControlHost tags and CHSM event names. The method run can be used to process JNET::JControlHost messages and accordingly update the state machine.

For client specific events with a designated JNET::JControlHost tag, the corresponding entry in the event table should be replaced. This should be done in the constructor of the derived class using method JDAQClient::replaceEvent.

The method JDAQClient::addParameter can be used to add a parameter of the derived class to the list that is parsed in method enter.

The method JDAQClient::filter can be overwritten so that a specific action is made before the corresponding message is processed by the state machine. The message is ignored if this method returns true, else it is normally processed.

The method JDAQClient::setSelect can be used to set the file descriptor mask of the select call and the method actionSelect can be used to take client specific actions following the select call.

If the clock interval is non-zero, the method JDAQClient::actionRunning is repeatedly called when this client machine is in state Running. The clock interval can be set using method JDAQClient::setClockInterval.

Definition at line 88 of file JDAQClient.hh.

Constructor & Destructor Documentation

KM3NETDAQ::JDAQClient::JDAQClient ( const std::string &  name)
inline

Constructor.

Parameters
namename of client

Definition at line 97 of file JDAQClient.hh.

97  :
98  JDAQStateMachine(name),
99  parser(),
100  event_number(-1)
101  {
102  configure();
103  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
void configure()
Configure client.
Definition: JDAQClient.hh:723
int event_number
number of last event
Definition: JDAQClient.hh:835
KM3NETDAQ::JDAQClient::JDAQClient ( const std::string &  name,
const std::string &  server,
JLogger logger,
const int  level 
)
inline

Constructor.

Parameters
namename of client
servername of command message server
loggerpointer to logger
leveldebug level

Definition at line 114 of file JDAQClient.hh.

117  :
118  JDAQStateMachine(name),
119  parser(),
120  event_number(-1)
121  {
122  this->logger = JMessageLogger(logger, name, level);
123 
124  try {
125  this->server.reset(new JControlHost(server));
126  }
127  catch(JControlHostException& error) {
128  JErrorStream(this->logger) << error;
129  }
130 
131  configure();
132  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
ControlHost class.
void configure()
Configure client.
Definition: JDAQClient.hh:723
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
int event_number
number of last event
Definition: JDAQClient.hh:835
Exception for ControlHost.
Definition: JException.hh:432

Member Function Documentation

virtual bool KM3NETDAQ::JDAQClient::enter ( const JArgs args)
inlinevirtual

Enter the state machine.

This overloaded method enter reproduces the constructor. All necessary input is parsed from the list of arguments. In case of an error, the state machine is not entered.

Parameters
argsarray of command line arguments

Definition at line 143 of file JDAQClient.hh.

144  {
145  using namespace std;
146 
147  string server;
148  string logger;
149  int level;
150  bool use_cout;
151 
152  try {
153 
154  parser['H'] = make_field(server) = "localhost";
155  parser['M'] = make_field(logger) = "localhost";
156  parser['d'] = make_field(level) = 0;
157  parser['c'] = make_field(use_cout);
158 
159  if (parser.read(args) != 0) {
160  return false;
161  }
162  }
163  catch(const exception &error) {
164  cerr << error.what() << endl;
165  return false;
166  }
167 
168  try {
169 
170  JLogger* out = NULL;
171 
172  if (use_cout)
173  out = new JStreamLogger(cout);
174  else
175  out = new JControlHostLogger(logger);
176 
177  this->logger = JMessageLogger(out, getName(), level);
178 
179  this->server.reset(new JControlHost(server));
180 
181  return enter();
182  }
183  catch(const JControlHostException& error) {
184  cerr << error << endl;
185  return false;
186  }
187  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
ControlHost class.
Message logging based on std::ostream.
Interface for logging messages.
Definition: JLogger.hh:22
Message logging based on ControlHost.
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
virtual bool enter()
Enter the state machine.
Definition: JDAQClient.hh:195
Exception for ControlHost.
Definition: JException.hh:432
int read(const int argc, const char *const argv[])
Parse the program&#39;s command line options.
Definition: JParser.hh:1673
const char * getName()
Get ROOT name of given data type.
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
virtual bool KM3NETDAQ::JDAQClient::enter ( )
inlinevirtual

Enter the state machine.

This method activates the subscription to JNET::JControlHost messages. In case of an error, the state machine is not entered.

Reimplemented in KM3NETDAQ::JDAQDriver.

Definition at line 195 of file JDAQClient.hh.

196  {
197  using namespace std;
198 
199  if (server.is_valid() && logger.is_valid()) {
200 
201  try {
202 
203  server->Subscribe(getSubscription(eventTable));
204  server->SendMeAlways();
205  server->MyId(getFullName());
206 
207  return CHSM::machine::enter();
208  }
209  catch(const JControlHostException& error) {
210  JErrorStream(logger) << error;
211  }
212 
213  } else {
214  cerr << "Message server or logger not properly initialised." << endl;
215  }
216 
217  return false;
218  }
JNET::JSubscriptionList getSubscription(const JEventTable &event_table)
Convert event table to ControlHost subscription.
Definition: JEventTable.hh:125
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
Exception for ControlHost.
Definition: JException.hh:432
bool is_valid() const
Check validity of logger object.
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
const std::string & getFullName() const
Get full name of this run control client.
Definition: JDAQClient.hh:248
virtual bool KM3NETDAQ::JDAQClient::exit ( )
inlinevirtual

Exit the state machine.

This method releases the various resources.

Definition at line 225 of file JDAQClient.hh.

226  {
227  try {
228  if (server.is_valid()) server.reset(NULL);
229  }
230  catch(const JControlHostException& error) {
231  }
232 
233  try {
234  if (logger.is_valid()) logger.reset(NULL);
235  }
236  catch(const JControlHostException& error) {
237  }
238 
239  return CHSM::machine::exit();
240  }
void reset(JLogger *__logger=NULL)
Reset logger.
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
Exception for ControlHost.
Definition: JException.hh:432
bool is_valid() const
Check validity of logger object.
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
const std::string& KM3NETDAQ::JDAQClient::getFullName ( ) const
inline

Get full name of this run control client.

Returns
full name

Definition at line 248 of file JDAQClient.hh.

249  {
250  return full_name;
251  }
std::string full_name
Definition: JDAQClient.hh:830
const JNET::JTag& KM3NETDAQ::JDAQClient::getUniqueTag ( ) const
inline

Get unique tag of this run control client.

Returns
unique tag

Definition at line 259 of file JDAQClient.hh.

260  {
261  return unique_tag;
262  }
int KM3NETDAQ::JDAQClient::getEventNumber ( ) const
inline

Get last event number.

Returns
event number

Definition at line 270 of file JDAQClient.hh.

271  {
272  return event_number;
273  }
int event_number
number of last event
Definition: JDAQClient.hh:835
bool KM3NETDAQ::JDAQClient::isRunning ( ) const
inline

Check if this client is in runnig state.

Returns
true if running; else false

Definition at line 281 of file JDAQClient.hh.

282  {
283  return Main.RunControl.Operational.Running.active();
284  }
void KM3NETDAQ::JDAQClient::replaceEvent ( const JNET::JTag oldTag,
const JNET::JTag newTag,
JDAQEvent_t event 
)
inline

Replace tag of given event in event table.

Parameters
oldTagold tag
newTagnew tag
eventevent

Definition at line 294 of file JDAQClient.hh.

297  {
298  eventTable.replace(oldTag, newTag, event);
299  }
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
void replace(const JNET::JTag &oldTag, const JNET::JTag &newTag, JDAQEvent_t &event)
Replace entry in table.
Definition: JEventTable.hh:93
JDAQEvent_t* KM3NETDAQ::JDAQClient::findEvent ( const JNET::JTag tag,
const std::string &  event_name 
)
inline

Find event in event table.

Parameters
tagtag
event_nameevent name
Returns
pointer to event or NULL

Definition at line 309 of file JDAQClient.hh.

310  {
311  JEventTable::const_iterator i = eventTable.find(tag, event_name);
312 
313  if (i != eventTable.end())
314  return i->second;
315  else
316  return NULL;
317  }
const_iterator find(const JNET::JTag &tag, const std::string &event_name) const
Find entry.
Definition: JEventTable.hh:112
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
template<class T >
void KM3NETDAQ::JDAQClient::addParameter ( const char  option,
T &  parameter 
)
inline

Add parameter to parser used in method enter().

Parameters
optionoption
parameterparameter

Definition at line 327 of file JDAQClient.hh.

328  {
329  parser[option] = make_field(parameter);
330  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
template<class T >
void KM3NETDAQ::JDAQClient::addParameter ( const char  option,
T &  parameter,
const T &  value 
)
inline

Add parameter to parser used in method enter().

Parameters
optionoption
parameterparameter
valuedefault value

Definition at line 341 of file JDAQClient.hh.

342  {
343  parser[option] = make_field(parameter) = value;
344  }
JParser parser
parser method enter()
Definition: JDAQClient.hh:834
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition: JParser.hh:1836
long long int KM3NETDAQ::JDAQClient::getClockDelay ( ) const
inline

Get total delay time.

Returns
delay time [us]

Definition at line 352 of file JDAQClient.hh.

353  {
354  return clock.getDelay();
355  }
long long int getDelay() const
Get total delay time.
Definition: JTimekeeper.hh:78
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
const std::string& KM3NETDAQ::JDAQClient::getHostname ( ) const
inline

Get hostname.

Returns
host name

Definition at line 363 of file JDAQClient.hh.

364  {
365  return hostname;
366  }
std::string hostname
Definition: JDAQClient.hh:829
long long int KM3NETDAQ::JDAQClient::getClockInterval ( ) const
inline

Get interval time.

Returns
interval time [us]

Definition at line 374 of file JDAQClient.hh.

375  {
376  return clock.getInterval();
377  }
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
long long int getInterval() const
Get interval time.
Definition: JTimekeeper.hh:67
void KM3NETDAQ::JDAQClient::setClockInterval ( const long long int  interval_us)
inline

Set interval time.

Parameters
interval_usinterval time [us]

Definition at line 385 of file JDAQClient.hh.

386  {
387  clock.setInterval(interval_us);
388  }
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
void setInterval(const long long int interval_us)
Set interval time.
Definition: JTimekeeper.hh:89
void KM3NETDAQ::JDAQClient::resetClock ( )
inline

Reset clock.

Definition at line 394 of file JDAQClient.hh.

395  {
396  clock.reset();
397  }
void reset(const long long int t0)
Reset time.
Definition: JTimekeeper.hh:100
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
void KM3NETDAQ::JDAQClient::setSelect ( )
inline

Set the file descriptor mask for the select call.

Definition at line 403 of file JDAQClient.hh.

404  {
405  select.reset();
406 
408 
410  }
JSelectReader select
select call
Definition: JDAQClient.hh:833
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
JFileDescriptorMask & getReaderMask()
Get reader mask.
void setReaderMask(const JAbstractFile &file)
Set reader mask.
void reset()
Reset.
void setSelect()
Set the file descriptor mask for the select call.
Definition: JDAQClient.hh:403
virtual void KM3NETDAQ::JDAQClient::setSelect ( JFileDescriptorMask mask) const
inlinevirtual

Set the file descriptor mask for the select call.

This implementation does nothing but may be redefined by the derived class.

Parameters
maskfile descriptor mask

Reimplemented in KM3NETDAQ::JDataWriter, and KM3NETDAQ::MonitorRouter.

Definition at line 419 of file JDAQClient.hh.

420  {}
virtual void KM3NETDAQ::JDAQClient::actionSelect ( const JFileDescriptorMask mask)
inlinevirtual

Action method following last select call.

This implementation does nothing but may be redefined by the derived class.

Parameters
maskfile descriptor mask

Reimplemented in KM3NETDAQ::DataQueue, KM3NETDAQ::JDataWriter, and KM3NETDAQ::MonitorRouter.

Definition at line 429 of file JDAQClient.hh.

430  {}
virtual void KM3NETDAQ::JDAQClient::actionRunning ( )
inlinevirtual

This method is repeatedly called when this client machine is in state Running and the clock interval time is non-zero.

This implementation does nothing but may be redefined by the derived class. Care has to be taken so that the time needed to execute this method should be less than the specified clock interval time (see method setClockInterval()).

Reimplemented in JDataFilter, KM3NETDAQ::JDataWriter, KM3NETDAQ::JDOMSimulator, KM3NETDAQ::DataQueue, KM3NETDAQ::JEventGenerator, KM3NETDAQ::MonitorRouter, and AcousticDataFilter.

Definition at line 440 of file JDAQClient.hh.

441  {}
virtual void KM3NETDAQ::JDAQClient::actionInput ( int  length,
const char *  buffer 
)
inlinevirtual

This method is called at ev_input.

Parameters
lengthlength of data
bufferpointer to data

Reimplemented in AcousticDataFilter.

Definition at line 450 of file JDAQClient.hh.

451  {
452  using namespace std;
453 
454  JProperties properties(JEquationParameters("=", ";", "", ""), 1);
455 
456  int level = this->logger.getLevel();
457 
458  properties["debug"] = level;
459 
460  properties.read(string(buffer, length));
461 
462  this->logger.setLevel(level);
463  }
Utility class to parse parameter values.
Definition: JProperties.hh:484
Simple data structure to support I/O of equations (see class JLANG::JEquation).
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
void setLevel(const int __level)
Set debug level.
JLevel_t getLevel()
Get debug level.
virtual bool KM3NETDAQ::JDAQClient::filter ( const std::string &  tag,
int  length,
const char *  buffer 
)
inlinevirtual

Filter message.

The filter method can be overloaded so that a specific action is made before the corresponding message is processed by the state machine. The message is ignored if true is returned, else it is normally processed.

Parameters
tagtag
lengthnumber of characters
buffermessage
Returns
skip message or not

Definition at line 477 of file JDAQClient.hh.

478  {
479  return false;
480  }
void KM3NETDAQ::JDAQClient::run ( )
inline

Run as run control client following command messages via JNET::JControlHost.

This method can be called once the state machine is entered. It returns when the state machine is exited. If the clock interval is non-zero, the method actionRunning() is repeatedly called when this client machine is in state Running. The file descriptor mask can be set to interrupt the timeout of the select call and clock method wait() in this calling sequence (see methods setSelect() and actionSelect()).

Definition at line 493 of file JDAQClient.hh.

494  {
495  using namespace std;
496 
497  while (active()) {
498 
499  try {
500 
501  setSelect();
502 
503  if (select(JTimeval(TIMEOUT_S,0)) > 0) {
504 
505  if (select.hasReaderMask(*server)) {
506  update();
507  }
508 
510 
511  } else {
512 
513  continue;
514  }
515 
516 
517  if (isRunning() && clock.getInterval() != 0LL) {
518 
519  long long int numberOfCalls = 0;
520 
521  clock.reset();
522 
523  do {
524 
525  ++numberOfCalls;
526 
527  setSelect();
528 
529  if (clock.wait(select.getReaderMask())) {
530 
531  if (select.hasReaderMask(*server)) {
532  update();
533  }
534 
536 
537  } else {
538 
539  try {
540  actionRunning();
541  }
542  catch(const exception& error) {
543  logger.error(error.what());
544  }
545  }
546 
547  } while (isRunning());
548 
549  if (numberOfCalls != 0) {
550  JNoticeStream(logger) << "Delay per call " << clock.getDelay() / numberOfCalls / 1000 << " ms";
551  }
552  }
553  }
554  catch(const exception& error) {
555  JErrorStream(logger) << "method run(): " << error.what();
556  }
557  }
558  }
long long int getDelay() const
Get total delay time.
Definition: JTimekeeper.hh:78
JSelectReader select
select call
Definition: JDAQClient.hh:833
void reset(const long long int t0)
Reset time.
Definition: JTimekeeper.hh:100
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
JFileDescriptorMask & getReaderMask()
Get reader mask.
JTimekeeper clock
central clock
Definition: JDAQClient.hh:832
void wait() const
Wait until the number of time intervals has elapsed since the last call to the reset method...
Definition: JTimekeeper.hh:145
Auxiliary class for time values.
Definition: JTimeval.hh:26
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
Definition: JDAQClient.hh:440
bool isRunning() const
Check if this client is in runnig state.
Definition: JDAQClient.hh:281
void update()
Update state machine.
Definition: JDAQClient.hh:643
long long int getInterval() const
Get interval time.
Definition: JTimekeeper.hh:67
static const int TIMEOUT_S
time out of update [s]
Definition: JDAQClient.hh:631
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
void error(const JMessage_t &message)
void setSelect()
Set the file descriptor mask for the select call.
Definition: JDAQClient.hh:403
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
Definition: JDAQClient.hh:429
bool hasReaderMask(const JAbstractFile &file) const
Has reader file.
void KM3NETDAQ::JDAQClient::run ( const int  port)
inline

Run for ever.

This method can be used when the run control client is started before the run control (e.g. at boot time of the host processor). This method should be called before the state machine is entered. It launches a server which accepts a JNET::JControlHost connection from a designated application e.g. the JDAQClientStarter.cc program. The state machine is entered using the available data in the JNET::JControlHost message. After the state machine is exited, it accepts a new a JNET::JControlHost connection.

Parameters
portport number

Definition at line 573 of file JDAQClient.hh.

574  {
576 
577  for ( ; ; ) {
578 
579  JControlHost* ps = server.AcceptClient();
580 
581  ps->Connected();
582 
583  JNET::JPrefix prefix;
584 
585  ps->WaitHead(prefix);
586 
587  const int length = prefix.getSize();
588 
589  char* buffer = new char[length];
590 
591  ps->GetFullData(buffer, length);
592  ps->PutFullData(prefix.toString(), buffer, length);
593 
594  delete ps;
595 
596  enter(JArgs(std::string(buffer, length)));
597 
598  delete [] buffer;
599 
600  run();
601 
602  exit();
603  }
604  }
ControlHost prefix.
Definition: JPrefix.hh:31
ControlHost class.
int Connected()
Send version.
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
void run()
Run as run control client following command messages via JNET::JControlHost.
Definition: JDAQClient.hh:493
int getSize() const
Get size.
Definition: JPrefix.hh:63
virtual bool enter()
Enter the state machine.
Definition: JDAQClient.hh:195
virtual bool exit()
Exit the state machine.
Definition: JDAQClient.hh:225
int WaitHead(JPrefix &prefix)
Wait for header.
std::string toString() const
Convert tag to string.
Definition: JTag.hh:167
int GetFullData(void *buffer, int length)
Receive data.
Light-weight wrapper class around server socket.
int PutFullData(const JTag &tag, const void *buffer, const int length)
Send data.
void KM3NETDAQ::JDAQClient::run ( std::istream &  in)
inline

Run client with commands from input stream (e.g for debugging).

Example input format:

<tag> <event name>[#data];
<tag> <event name>[#data];
Parameters
ininput stream

Definition at line 618 of file JDAQClient.hh.

619  {
620  using std::string;
621 
622  string tag;
623  string buffer;
624 
625  while (in >> tag && getline(in, buffer, ';')) {
626  update(tag, buffer.length(), buffer.data());
627  }
628  }
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
Definition: JString.hh:468
void update()
Update state machine.
Definition: JDAQClient.hh:643
void KM3NETDAQ::JDAQClient::update ( )
inlineprivate

Update state machine.

This method waits for a message from JNET::JControlHost server.

Definition at line 643 of file JDAQClient.hh.

644  {
645  JNET::JPrefix prefix;
646 
647  server->WaitHead(prefix);
648 
649  const int length = prefix.getSize();
650 
651  char* buffer = new char[length];
652 
653  server->GetFullData(buffer, length);
654 
655  if (!filter(prefix.toString(), length, buffer)) {
656  update(prefix.toString(), length, buffer);
657  }
658 
659  delete [] buffer;
660  }
ControlHost prefix.
Definition: JPrefix.hh:31
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
int getSize() const
Get size.
Definition: JPrefix.hh:63
virtual bool filter(const std::string &tag, int length, const char *buffer)
Filter message.
Definition: JDAQClient.hh:477
void update()
Update state machine.
Definition: JDAQClient.hh:643
std::string toString() const
Convert tag to string.
Definition: JTag.hh:167
void KM3NETDAQ::JDAQClient::update ( const JNET::JTag tag,
int  length,
const char *  buffer 
)
inlineprivate

Update state machine.

Parameters
tagtag
lengthnumber of characters
buffermessage

Definition at line 670 of file JDAQClient.hh.

671  {
672  using namespace std;
673  using namespace JLANG;
674 
675  string::size_type pos = 0;
676 
677  while (pos != (string::size_type) length && TOKEN_DELIMETER.find(*(buffer + pos)) == string::npos) {
678  ++pos;
679  }
680 
681  JEvent_t event = JEvent_t::toValue(string(buffer, pos));
682 
683  JString event_name(event.getName());
684 
685  event_number = event.getNumber();
686  event_name = event_name.trim(); // remove white spaces, if any
687 
688  while (pos != (string::size_type) length && TOKEN_DELIMETER.find(*(buffer + pos)) != string::npos) {
689  ++pos;
690  }
691 
692 
693  JEventTable::const_iterator i = eventTable.find(tag, event_name);
694 
695  if (i != eventTable.end()) {
696 
697  // redirect all I/O
698 
699  JErrorStream error(logger);
700 
701  JRedirectStream redirect[] = { JRedirectStream(cin, JLANG::null),
703  JRedirectStream(cerr, error) };
704 
705  if (redirect[0] &&
706  redirect[1] &&
707  redirect[2]) {
708 
709  (*(i->second))(length - pos, buffer + pos);
710  }
711 
712  } else {
713 
714  JErrorStream(logger) << "Unknown key <" << JEventTable::getKey(tag,event_name) << ">";
715  }
716  }
Wrapper class around STL string class.
Definition: JString.hh:28
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
const_iterator find(const JNET::JTag &tag, const std::string &event_name) const
Find entry.
Definition: JEventTable.hh:112
static const std::string TOKEN_DELIMETER
Definition: JDAQTags.hh:36
static std::string getKey(const JNET::JTag &tag, const CHSM::event &event)
Get key for a given tag and event.
Definition: JEventTable.hh:55
static JEvent_t toValue(const std::string &buffer)
Convert string to event.
int event_number
number of last event
Definition: JDAQClient.hh:835
This class can be used to temporarily redirect one output (input) stream to another output (input) st...
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
static JNullStream null
Null I/O stream.
Definition: JNullStream.hh:51
void KM3NETDAQ::JDAQClient::configure ( )
inlineprivate

Configure client.

This method is used to setup the event table.

Definition at line 723 of file JDAQClient.hh.

724  {
725  using namespace std;
726  using namespace JNET;
727 
729 
732 
733  for (JTag buffer[] = { RC_CMD, unique_tag, DISPTAG_UNDEFINED }, *tag = buffer; *tag != DISPTAG_UNDEFINED; ++tag) {
734 
735  eventTable.insert(*tag, ev_init);
736  eventTable.insert(*tag, ev_configure);
737  eventTable.insert(*tag, ev_start);
738  eventTable.insert(*tag, ev_pause);
739  eventTable.insert(*tag, ev_continue);
740  eventTable.insert(*tag, ev_stop);
741  eventTable.insert(*tag, ev_reset);
742  eventTable.insert(*tag, ev_quit);
743  eventTable.insert(*tag, ev_off);
744 
745  eventTable.insert(*tag, ev_check);
746  eventTable.insert(*tag, ev_input);
747 
748  eventTable.insert(*tag, ev_recover);
749  }
750 
751  JControlHost::Throw(true);
752 
753  setClockInterval(TIMEOUT_S * 1000000LL);
754  }
JTag getUniqueTag(const std::string &hostname, const std::string &name)
Get unique tag of run control client.
void setClockInterval(const long long int interval_us)
Set interval time.
Definition: JDAQClient.hh:385
void insert(const JNET::JTag &tag, JDAQEvent_t &event)
Insert entry in table.
Definition: JEventTable.hh:80
std::string full_name
Definition: JDAQClient.hh:830
static const JTag DISPTAG_UNDEFINED(0)
std::string getHostname()
Get host name.
Definition: JNetwork.hh:75
JEventTable eventTable
event table
Definition: JDAQClient.hh:828
static const int TIMEOUT_S
time out of update [s]
Definition: JDAQClient.hh:631
const char * getName()
Get ROOT name of given data type.
static const JNET::JTag RC_CMD
Definition: JDAQTags.hh:44
ControlHost tag.
Definition: JTag.hh:35
std::string getFullName(const std::string &hostname, const std::string &name)
Get full name of run control client.
static void Throw(const bool option)
Enable/disable throw option.
Definition: JThrow.hh:37
std::string hostname
Definition: JDAQClient.hh:829
void KM3NETDAQ::JDAQClient::enterState ( const CHSM::state &  state,
const CHSM::event &  event 
)
inlineprivate

Action when entering state.

This method provides for the hand shaking with the run control program.

Parameters
stateentered state
eventevent that triggered transition

Definition at line 764 of file JDAQClient.hh.

766  {
767  std::ostringstream os;
768 
769  os << getFullName()
770  << getTokenDelimeter()
771  << JEvent_t(event.name(), event_number)
772  << getTokenDelimeter()
773  << getStateName(state.name());
774 
775  server->PutFullString(RC_REPLY, os.str());
776  }
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
JSharedPointer< JControlHost > server
message server
Definition: JDAQClient.hh:635
std::string getStateName(const std::string &name)
Get name of state.
int event_number
number of last event
Definition: JDAQClient.hh:835
static const JNET::JTag RC_REPLY
Definition: JDAQTags.hh:45
char getTokenDelimeter()
Get the token delimeter for command messages.
const std::string & getFullName() const
Get full name of this run control client.
Definition: JDAQClient.hh:248
virtual void KM3NETDAQ::JDAQClient::actionCheck ( int  length,
const char *  buffer 
)
inlineprivatevirtual

This method is called at ev_check and reports a system check by mimicing an enter state action.

Parameters
lengthnumber of characters
buffermessage

Definition at line 785 of file JDAQClient.hh.

786  {
787  if (Main.RunControl.Error.active()) {
788 
789  enterState(Main.RunControl.Error, ev_check);
790 
791  } else {
792 
793  for (CHSM::parent::iterator state = Main.RunControl.Operational.begin(); state != Main.RunControl.Operational.end(); ++state) {
794 
795  if (state->active()) {
796 
797  // mimic enter state
798 
799  enterState(*state, ev_check);
800  }
801  }
802  }
803  }
void enterState(const CHSM::state &state, const CHSM::event &event)
Action when entering state.
Definition: JDAQClient.hh:764
void KM3NETDAQ::JDAQClient::execute ( action  __action,
const CHSM::event &  __event 
)
inlineprivate

The method to execute the action.

Parameters
__actionpointer to action method
__eventevent that triggered the action

Definition at line 812 of file JDAQClient.hh.

813  {
814  try {
815 
816  const JDAQStateMachine::ev_daq_event& event = dynamic_cast<const JDAQStateMachine::ev_daq_event&>(__event);
817 
818  (this->*__action)(event->length, event->buffer);
819  }
820  catch(const std::exception& error) {
821  logger.error(error.what());
822  logger.error("Trigger ev_error.");
823  ev_error();
824  }
825  }
Structure to store the ToT mean and standard deviation of the hits produced by a nanobeacon in a sour...
JMessageLogger logger
message logger
Definition: JDAQClient.hh:636
void error(const JMessage_t &message)

Member Data Documentation

const int KM3NETDAQ::JDAQClient::TIMEOUT_S = 1
static

time out of update [s]

Definition at line 631 of file JDAQClient.hh.

JSharedPointer<JControlHost> KM3NETDAQ::JDAQClient::server
protected

message server

Definition at line 635 of file JDAQClient.hh.

JMessageLogger KM3NETDAQ::JDAQClient::logger
protected

message logger

Definition at line 636 of file JDAQClient.hh.

JEventTable KM3NETDAQ::JDAQClient::eventTable
private

event table

Definition at line 828 of file JDAQClient.hh.

std::string KM3NETDAQ::JDAQClient::hostname
private

Definition at line 829 of file JDAQClient.hh.

std::string KM3NETDAQ::JDAQClient::full_name
private

Definition at line 830 of file JDAQClient.hh.

JNET::JTag KM3NETDAQ::JDAQClient::unique_tag
private

Definition at line 831 of file JDAQClient.hh.

JTimekeeper KM3NETDAQ::JDAQClient::clock
private

central clock

Definition at line 832 of file JDAQClient.hh.

JSelectReader KM3NETDAQ::JDAQClient::select
private

select call

Definition at line 833 of file JDAQClient.hh.

JParser KM3NETDAQ::JDAQClient::parser
private

parser method enter()

Definition at line 834 of file JDAQClient.hh.

int KM3NETDAQ::JDAQClient::event_number
private

number of last event

Definition at line 835 of file JDAQClient.hh.


The documentation for this class was generated from the following file: