1#ifndef __JRUNCONTROL__JDAQCLIENT__
2#define __JRUNCONTROL__JDAQCLIENT__
301 using CHSM::machine::enter;
302 using CHSM::machine::exit;
319 const std::string&
server,
330 catch(
const std::exception& error) {
339 JErrorStream(this->logger) <<
"Process with nick name \"" <<
getFullName() <<
"\" already running on host(s) " << buffer;
411 catch(
const std::exception &error) {
412 cerr << error.what() << endl;
431 catch(
const std::exception& error) {
432 cerr << error.what() << endl;
457 server->Subscribe(buffer);
463 return CHSM::machine::enter();
465 catch(
const std::exception& error) {
470 cerr <<
"Message server or logger not properly initialised." << endl;
489 catch(
const std::exception& error) {
495 catch(
const std::exception& error) {
498 return CHSM::machine::exit();
642 properties[
"debug"] = level;
644 properties.
read(
string(buffer, length));
661 virtual bool filter(
const JTag& tag,
int length,
const char* buffer)
716 long long int numberOfCalls = 0;
739 catch(
const std::exception& error) {
746 if (numberOfCalls != 0) {
755 catch(
const std::exception& error) {
788 const int length = prefix.
getSize();
790 char* buffer =
new char[length];
819 void run(std::istream& in)
826 while (in >> tag && in >> skipws &&
getline(in, buffer,
';')) {
827 update(tag, buffer.length(), buffer.data());
846 const int length = prefix.
getSize();
848 char* buffer =
new char[length];
850 server->GetFullData(buffer, length);
870 if (
filter(tag, length, buffer)) {
883 string::size_type pos = 0;
885 while (pos != (string::size_type) length &&
TOKEN_DELIMETER.find(*(buffer + pos)) == string::npos) {
891 if (event.hasInfo()) {
895 while (pos != (string::size_type) length &&
TOKEN_DELIMETER.find(*(buffer + pos)) != string::npos) {
900 JEventTable::const_iterator i =
eventTable.
find(tag, event.getName());
904 const CHSM::state*
const s0 =
getState();
906 if (!i->second->active()) {
908 JWarningStream(
logger) <<
"Event " << i->second->name() <<
" not active (" << (s0 != NULL ? s0->name() :
"") <<
")";
910 if (
server && s0 != NULL) {
929 (*(i->second))(length - pos, buffer + pos);
933 const CHSM::state*
const s1 =
getState();
936 << (s0 != NULL ? s0->name() :
"")
937 <<
"->(" << i->second->name() <<
")->"
938 << (s1 != NULL ? s1->name() :
"");
962 std::string
getMessage(
const CHSM::state& state,
const CHSM::event& event)
const
964 std::ostringstream os;
985 virtual void enterState(
const CHSM::state& state,
const CHSM::event& event)
override
1009 if (state->active()) {
1032 (this->*__action)(event->length, event->buffer);
1034 catch(
const std::exception& error) {
1035 JErrorStream(
logger) <<
"Error at event " << __event.name() <<
" \"" << error.what() <<
"\"; trigger ev_error.";
1049 if (state->active()) {
General purpose message reporting.
Message reporting compatible with STL output stream operations.
Hostname and IP address functions.
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Utility class to parse parameter values.
Scheduling of actions via fixed latency intervals.
Jpp environment information.
const std::string & getName() const
Get name of state machine.
void(JDAQCHSM::*) action(int, const char *)
Type definition of action method.
JDAQStateMachine::state_Main::state_RunControl::state_Operational Operational
JDAQStateMachine::state_Main::state_RunControl RunControl
JDAQStateMachine::ev_recover_event ev_recover
JDAQStateMachine::ev_continue_event ev_continue
JDAQStateMachine::ev_stop_event ev_stop
JDAQStateMachine::ev_off_event ev_off
JDAQStateMachine::ev_init_event ev_init
JDAQStateMachine::ev_start_event ev_start
JDAQStateMachine::ev_pause_event ev_pause
JDAQStateMachine::ev_check_event ev_check
JDAQStateMachine::ev_error_event ev_error
JDAQStateMachine::ev_reset_event ev_reset
JDAQStateMachine::ev_configure_event ev_configure
JDAQStateMachine::state_Main Main
JDAQStateMachine::ev_input_event ev_input
JDAQStateMachine::ev_quit_event ev_quit
Data structure to store command line arguments.
Utility class to parse parameter values.
bool read(const JEquation &equation)
Read equation.
long long int getDelay() const
Get total delay time.
void setInterval(const long long int interval_us)
Set interval time.
void wait() const
Wait until the number of time intervals has elapsed since the last call to the reset method.
void reset(const long long int t0)
Reset time.
long long int getInterval() const
Get interval time.
Exception for ControlHost.
Simple data structure to support I/O of equations (see class JLANG::JEquation).
virtual const char * what() const override
Get error message.
Auxiliary class for method select.
This class can be used to temporarily redirect one output (input) stream to another output (input) st...
static void Throw(const bool option)
Auxiliary class for time values.
Message logging based on ControlHost.
Interface for logging messages.
void error(const JMessage_t &message)
void reset(JLogger *__logger=NULL)
Reset logger.
JLevel_t getLevel()
Get debug level.
void setLevel(const int __level)
Set debug level.
Message logging based on std::ostream.
Light-weight wrapper class around server socket.
JControlHost * AcceptClient(JTimeval timeout=JTimeval::max())
Accept new client.
static int WhereIs(const std::string &host_name, const std::string &nick_name, std::string &answer)
Locate ControlHost client(s).
int WaitHead(JPrefix &prefix)
Wait for header.
int GetFullData(void *buffer, long long int length)
Receive data.
int PutFullData(const JTag &tag, const void *buffer, const long long int length)
Send data.
int Connected()
Send version.
int getSize() const
Get size.
Wrapper class for select call.
void setReaderMask(const JAbstractFile &file)
Set reader mask.
bool hasReaderMask(const JAbstractFile &file) const
Has reader file.
JFileDescriptorMask & getReaderMask()
Get reader mask.
std::string toString() const
Convert subscription list to string.
ControlHost subscription.
std::string toString() const
Convert tag to string.
const JTag & getTag() const
Get tag.
Utility class to parse command line options.
int read(const int argc, const char *const argv[])
Parse the program's command line options.
Control unit client base class.
virtual void enterState(const CHSM::state &state, const CHSM::event &event) override
Action when entering state.
void update(const JTag &tag, int length, const char *buffer)
Update state machine.
virtual void actionInput(int length, const char *buffer) override
This method is called at ev_input.
bool isRunning() const
Check if this client is in runnig state.
void update()
Update state machine.
virtual bool filter(const JTag &tag, int length, const char *buffer)
Filter message.
JDAQClient(const std::string &name)
Constructor.
JParser parser
parser method enter()
virtual void actionTagged(const JTag &tag, int length, const char *buffer)
This method is called when a custom tag is encountered.
JDAQClient(const std::string &name, JLogger *logger, const int level)
Constructor.
virtual void actionSelect(const JFileDescriptorMask &mask)
Action method following last select call.
void replaceEvent(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace tag of given event in event table.
std::shared_ptr< JControlHost > server
message server
void execute(action __action, const CHSM::event &__event) override
The method to execute the action.
std::string getMessage(const CHSM::state &state, const CHSM::event &event) const
Get event message.
virtual bool exit() override
Exit the state machine.
void addParameter(const char option, T ¶meter)
Add parameter to parser used in method enter().
void run(std::istream &in)
Run client with commands from input stream (e.g. for debugging).
void run(const int port)
Run for ever.
void run()
Run as run control client following command messages via JNET::JControlHost.
void configure()
Configure client.
virtual void setSelect(JFileDescriptorMask &mask) const
Set the file descriptor mask for the select call.
JSelectReader select
select call
JDAQEvent_t * findEvent(const JTag &tag, const std::string &event_name)
Find event in event table.
const CHSM::state * getState() const
Get current state.
JMessageLogger logger
message logger
virtual void actionRunning()
This method is repeatedly called when this client machine is in state Running and the clock interval ...
void addParameter(const char option, T ¶meter, const T &value)
Add parameter to parser used in method enter().
void setSelect()
Set the file descriptor mask for the select call.
virtual bool enter() override
Enter the state machine.
JSubscriptionList subscription
custom subscription
virtual bool enter(const JArgs &args)
Enter the state machine.
JDAQClient(const std::string &name, const std::string &server, JLogger *logger, const int level)
Constructor.
virtual void actionCheck(int length, const char *buffer) override
This method is called at ev_check and reports a system check by mimicing an enter state action.
void addSubscription(const JSubscription &subscription)
Add custom subscription.
void insert(const JTag &tag, JDAQEvent_t &event)
Insert entry in table.
void replace(const JTag &oldTag, const JTag &newTag, JDAQEvent_t &event)
Replace entry in table.
const_iterator find(const JTag &tag, const std::string &event_name) const
Find entry.
static JNullStream null
Null I/O stream.
std::istream & getline(std::istream &in, JString &object)
Read string from input stream until end of line.
const char * getGITVersion()
Get GIT version.
static const JTag DISPTAG_UNDEFINED(0)
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
const char * getName()
Get ROOT name of given data type.
KM3NeT DAQ data structures and auxiliaries.
static const JNET::JTag RC_REPLY
std::string getFullName(const std::string &hostname, const std::string &name)
Get full name of run control client.
JSubscriptionList getSubscription(const JEventTable &event_table)
Convert event table to ControlHost subscription.
static const std::string TOKEN_DELIMETER
JTag getUniqueTag(const std::string &hostname, const std::string &name)
Get unique tag of run control client.
static const JNET::JTag RC_CMD
std::string getStateName(const std::string &name)
Get name of state.
char getTokenDelimeter()
Get the token delimeter for command messages.
static const JNET::JTag RC_FAIL
Level specific message streamers.
Auxiliary class for all subscription.
Auxiliary class for any subscription.
Auxiliary data structure for DAQ client data.
const std::string & getHostname() const
Get hostname.
const JTag & getUniqueTag() const
Get unique tag of this run control client.
JTimekeeper clock
central clock
const std::string & getFullName() const
Get full name of this run control client.
void setEventInfo(const std::string &info)
Set last event information.
void setClockInterval(const long long int interval_us)
Set interval time.
long long int getClockDelay() const
Get total delay time.
void resetClock()
Reset clock.
JEventTable eventTable
event table
const std::string & getEventInfo() const
Get last event information.
JDAQClient_t(JDAQStateMachine *chsm)
Constructor.
std::string event_info
event information
long long int getClockInterval() const
Get interval time.
static const int TIMEOUT_S
time out of update [s]
Auxiliary class for handling event name and optional static information.
static JEvent_t toValue(const std::string &buffer)
Convert string to event.