1#ifndef __JRUNCONTROL__JDAQCLIENT__
2#define __JRUNCONTROL__JDAQCLIENT__
302 using CHSM::machine::enter;
303 using CHSM::machine::exit;
320 const std::string&
server,
331 catch(
const std::exception& error) {
340 JErrorStream(this->logger) <<
"Process with nick name \"" <<
getFullName() <<
"\" already running on host(s) " << buffer;
412 catch(
const std::exception &error) {
413 cerr << error.what() << endl;
432 catch(
const std::exception& error) {
433 cerr << error.what() << endl;
458 server->Subscribe(buffer);
464 return CHSM::machine::enter();
466 catch(
const std::exception& error) {
471 cerr <<
"Message server or logger not properly initialised." << endl;
490 catch(
const std::exception& error) {
496 catch(
const std::exception& error) {
499 return CHSM::machine::exit();
643 properties[
"debug"] = level;
645 properties.
read(
string(buffer, length));
662 virtual bool filter(
const JTag& tag,
int length,
const char* buffer)
717 long long int numberOfCalls = 0;
740 catch(
const std::exception& error) {
747 if (numberOfCalls != 0) {
756 catch(
const std::exception& error) {
789 const int length = prefix.
getSize();
791 char* buffer =
new char[length];
820 void run(std::istream& in)
827 while (in >> tag && in >> skipws &&
getline(in, buffer,
';')) {
828 update(tag, buffer.length(), buffer.data());
848 const int length = prefix.
getSize();
850 char* buffer =
new char[length];
852 server->GetFullData(buffer, length);
872 if (
filter(tag, length, buffer)) {
885 string::size_type pos = 0;
887 while (pos != (string::size_type) length &&
TOKEN_DELIMETER.find(*(buffer + pos)) == string::npos) {
893 if (event.hasInfo()) {
897 while (pos != (string::size_type) length &&
TOKEN_DELIMETER.find(*(buffer + pos)) != string::npos) {
902 JEventTable::const_iterator i =
eventTable.
find(tag, event.getName());
906 const CHSM::state*
const s0 =
getState();
908 if (!i->second->active()) {
910 JWarningStream(
logger) <<
"Event " << i->second->name() <<
" not active (" << (s0 != NULL ? s0->name() :
"") <<
")";
912 if (
server.is_valid() && s0 != NULL) {
931 (*(i->second))(length - pos, buffer + pos);
935 const CHSM::state*
const s1 =
getState();
938 << (s0 != NULL ? s0->name() :
"")
939 <<
"->(" << i->second->name() <<
")->"
940 << (s1 != NULL ? s1->name() :
"");
964 std::string
getMessage(
const CHSM::state& state,
const CHSM::event& event)
const
966 std::ostringstream os;
987 virtual void enterState(
const CHSM::state& state,
const CHSM::event& event)
override
1011 if (state->active()) {
1034 (this->*__action)(event->length, event->buffer);
1036 catch(
const std::exception& error) {
1037 JErrorStream(
logger) <<
"Error at event " << __event.name() <<
" \"" << error.what() <<
"\"; trigger ev_error.";
1051 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...
The template JSharedPointer class can be used to share a pointer to an object.
static void Throw(const bool option)
Auxiliary class for time values.
Message logging based on ControlHost.
Interface for logging messages.
bool is_valid() const
Check validity of logger object.
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.
JSharedPointer< JControlHost > server
message server
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.
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.