Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

EventLogger Class Reference

#include <EventLogger.h>

Inheritance diagram for EventLogger:

List of all members.


Detailed Description

allows logging of events to the console or a file, also provides some remote logging facilities over logSocket, required by Storyboard tool

Users' behaviors can call logMessage(), logImage(), and logWebcam() to insert the corresponding data into logSocket via an XML 'event' node.

The protocol used with logSocket is:

  • 'list' - send list of all instantiated StateNodes
  • 'spider name' - spider the current structure of StateNode named name
  • 'listen name' - send updates regarding the activation status of name and its subnodes; you can specify a state which is not yet running
  • 'ignore name' - cancels a previous listen command
  • 'clear' - cancels all previous listen commands; should be called at the beginning or end of each connection, preferably both

Each of those commands should be terminated with a newline - i.e. one command per line

After a list command, the first line will be the number of StateNodes, followed by that number of lines, one StateNode name per line.

After a spider command, an XML description of the model will be sent. If no matching StateNode is found, an warning will be displayed on serr, and an empty model ("<model></model>") returned over the network connection.

All other commands give no direct response - listen can be executed before the specified StateNode is yet running, and ignore doesn't care whether or not the specified StateNode was actually being listened for.

The format of the model is:

 <!DOCTYPE model [
 <!ELEMENT model (state*, transition*)>
 <!ELEMENT state (state*, transition*)>
 <!ELEMENT transition (source+, dest+)>
 <!ELEMENT source (#PCDATA)>
 <!ELEMENT dest (#PCDATA)>
 
 <!ATTLIST state id CDATA #REQUIRED>
 <!ATTLIST state class CDATA #REQUIRED>
 <!ATTLIST transition id CDATA #REQUIRED>
 <!ATTLIST transition class CDATA #REQUIRED>
 ]>

The format of status updates following a listen command is:

 <!DOCTYPE event [
 <!ELEMENT event (fire*, statestart*, statestop*)>
 <!ELEMENT fire (EMPTY)>
 <!ELEMENT statestart (EMPTY)>
 <!ELEMENT statestop (EMPTY)>

 <!ATTLIST fire id CDATA #REQUIRED>
 <!ATTLIST fire time CDATA #REQUIRED>
 <!ATTLIST statestart id CDATA #REQUIRED>
 <!ATTLIST statestart time CDATA #REQUIRED>
 <!ATTLIST statestop id CDATA #REQUIRED>
 <!ATTLIST statestop time CDATA #REQUIRED>
 ]>

The 'event' node is also used for the results of logImage(), logMessage(), and logWebcam().

Definition at line 77 of file EventLogger.h.


Public Member Functions

 EventLogger ()
 constructor
virtual ~EventLogger ()
 destructor
virtual ControlBasedoSelect ()
 opens a custom (embedded) menu to toggle individual EGIDs
virtual void refresh ()
 called when the child has deactivated and this control should refresh its display, or some other event (such as the user pressing the refresh button) has happened to cause a refresh to be needed
virtual void processEvent (const EventBase &event)
 sends all events received to stdout and/or logfile

Static Public Member Functions

static class SocketgetLogSocket ()
 returns logSocket
static int getLogSocketPort ()
 returns port
static void setLogSocketPort (int p)
 sets port
static void logImage (FilterBankGenerator &fbg, unsigned int layer, unsigned int channel, const BehaviorBase *source=NULL)
 send the current camera image over the log socket
static void logMessage (std::string msg, const BehaviorBase *source=NULL, const char *icon=NULL, unsigned int placement=0)
 send a string over the log socket
static void logWebcam (const BehaviorBase *source=NULL)
 request that the desktop side take a picture with the webcam (if available)
static int callback (char *buf, int bytes)
 called by wireless when there's new data

Protected Types

typedef std::set< BehaviorBase * > registry_t
 the type of the behavior registry (BehaviorBase::registry)
typedef std::set< std::string > listen_t
 the type of listen
typedef std::queue< xmlNode * > queuedEvents_t
 the type of queuedEvents
typedef std::stack< xmlNode * > transStack_t
 the type of transStack

Protected Member Functions

virtual void clearSlots ()
 deletes each slot item and clears the slots
void setStatus (unsigned int i, char c)
 sets the status char of slot i to c
void checkLogFile ()
 checks to see if logfilePath differs from the StringInputControl's value and switches it if it is
void spider (const StateNode *n, xmlNode *parent=NULL)
 dumps all of the transitions and subnodes of a given statenode
bool isListening (const StateNode *n)
 returns true iff n or one of its parents is found in listen
void runCommand (const std::string &s)
 parses commands sent from callback()
void indent (unsigned int level)
 just to prettify the data sent out - probably should make this a null-op to save bandwidth after debugging is done
const StateNodefind (const std::string &name)
 searches currently instantiated StateNodes to find the one named name
virtual void processStateMachineEvent (const EventBase &event)
 if there is a remote monitor listening for state machine transitions, this will send them over

Static Protected Member Functions

static void dumpQueuedEvents ()
 dumps elements of queuedEvents over logSocket, popping and freeing as it goes
static void dumpNode (xmlNode *node, xmlDoc *doc=NULL)
 writes an xmlNode out over logSocket, freeing node when complete

Protected Attributes

std::string logfilePath
 address of the logfile, if any (empty string is no logfile)
std::ofstream logfile
 if a filename is given, events are logged to here
unsigned int verbosity
 controls the level of verbosity - currently 0 through 2
listen_t listen
 a set of state machine names which should have their subnodes monitored

Static Protected Attributes

static EventLoggertheOne = NULL
 the instance which will handle network communication
static class StateMachineListener smProcess
 handles state machine transitions if the Storyboard GUI (or other remote monitor) is listening for state machine events
static class SocketlogSocket = NULL
 events which are logged will be sent over this port in an xml format. See eventlog.dtd in the docs directory
static int port = 10080
 port number logSocket will listen on
static unsigned int logSocketRefCount = 0
 reference count for logSocket -- when this hits 0, close the socket
static queuedEvents_t queuedEvents
 if logImage/logMessage/etc. are called during a transition, need to queue them until the transition event is complete
static transStack_t transStack
 if another transition occurs during the processing of another, have to recurse on processing the new transition first

Classes

class  StateMachineListener
 a separate processEvent to distinguish between events requested for logging and events requested by a remote monitor More...

Member Typedef Documentation

typedef std::set<BehaviorBase*> EventLogger::registry_t [protected]

the type of the behavior registry (BehaviorBase::registry)

Definition at line 179 of file EventLogger.h.

typedef std::set<std::string> EventLogger::listen_t [protected]

the type of listen

Definition at line 181 of file EventLogger.h.

typedef std::queue<xmlNode*> EventLogger::queuedEvents_t [protected]

the type of queuedEvents

Definition at line 184 of file EventLogger.h.

typedef std::stack<xmlNode*> EventLogger::transStack_t [protected]

the type of transStack

Definition at line 187 of file EventLogger.h.


Constructor & Destructor Documentation

EventLogger::EventLogger (  ) 

constructor

Definition at line 27 of file EventLogger.cc.

EventLogger::~EventLogger (  )  [virtual]

destructor

Definition at line 49 of file EventLogger.cc.


Member Function Documentation

ControlBase * EventLogger::doSelect (  )  [virtual]

opens a custom (embedded) menu to toggle individual EGIDs

Reimplemented from ControlBase.

Definition at line 62 of file EventLogger.cc.

void EventLogger::refresh (  )  [virtual]

called when the child has deactivated and this control should refresh its display, or some other event (such as the user pressing the refresh button) has happened to cause a refresh to be needed

Reimplemented from ControlBase.

Definition at line 97 of file EventLogger.cc.

Referenced by doSelect().

void EventLogger::processEvent ( const EventBase event  )  [virtual]

sends all events received to stdout and/or logfile

Implements EventListener.

Definition at line 103 of file EventLogger.cc.

static class Socket* EventLogger::getLogSocket (  )  [inline, static]

returns logSocket

Definition at line 93 of file EventLogger.h.

static int EventLogger::getLogSocketPort (  )  [inline, static]

returns port

Definition at line 96 of file EventLogger.h.

static void EventLogger::setLogSocketPort ( int  p  )  [inline, static]

sets port

Definition at line 99 of file EventLogger.h.

void EventLogger::logImage ( FilterBankGenerator fbg,
unsigned int  layer,
unsigned int  channel,
const BehaviorBase source = NULL 
) [static]

send the current camera image over the log socket

Definition at line 133 of file EventLogger.cc.

void EventLogger::logMessage ( std::string  msg,
const BehaviorBase source = NULL,
const char *  icon = NULL,
unsigned int  placement = 0 
) [static]

send a string over the log socket

Definition at line 165 of file EventLogger.cc.

void EventLogger::logWebcam ( const BehaviorBase source = NULL  )  [static]

request that the desktop side take a picture with the webcam (if available)

Definition at line 187 of file EventLogger.cc.

int EventLogger::callback ( char *  buf,
int  bytes 
) [static]

called by wireless when there's new data

Definition at line 361 of file EventLogger.cc.

Referenced by EventLogger().

void EventLogger::clearSlots (  )  [protected, virtual]

deletes each slot item and clears the slots

Reimplemented from ControlBase.

Definition at line 205 of file EventLogger.cc.

Referenced by ~EventLogger().

void EventLogger::setStatus ( unsigned int  i,
char  c 
) [protected]

sets the status char of slot i to c

Definition at line 210 of file EventLogger.cc.

Referenced by checkLogFile(), and doSelect().

void EventLogger::checkLogFile (  )  [protected]

checks to see if logfilePath differs from the StringInputControl's value and switches it if it is

Definition at line 216 of file EventLogger.cc.

Referenced by processEvent(), and refresh().

void EventLogger::spider ( const StateNode n,
xmlNode parent = NULL 
) [protected]

dumps all of the transitions and subnodes of a given statenode

if parent is NULL, will dump the results over logSocket, otherwise adds the xml tree as a child of parent

Definition at line 238 of file EventLogger.cc.

Referenced by runCommand().

bool EventLogger::isListening ( const StateNode n  )  [protected]

returns true iff n or one of its parents is found in listen

Definition at line 287 of file EventLogger.cc.

Referenced by processStateMachineEvent().

void EventLogger::runCommand ( const std::string &  s  )  [protected]

parses commands sent from callback()

Definition at line 312 of file EventLogger.cc.

Referenced by callback().

void EventLogger::indent ( unsigned int  level  )  [protected]

just to prettify the data sent out - probably should make this a null-op to save bandwidth after debugging is done

Definition at line 296 of file EventLogger.cc.

const StateNode * EventLogger::find ( const std::string &  name  )  [protected]

searches currently instantiated StateNodes to find the one named name

Definition at line 301 of file EventLogger.cc.

Referenced by runCommand().

void EventLogger::processStateMachineEvent ( const EventBase event  )  [protected, virtual]

if there is a remote monitor listening for state machine transitions, this will send them over

this is called by the StateMachineListener, which is subscribed to only those machines which have been requested by the remote monitor

Definition at line 375 of file EventLogger.cc.

Referenced by EventLogger::StateMachineListener::processEvent().

void EventLogger::dumpQueuedEvents (  )  [static, protected]

dumps elements of queuedEvents over logSocket, popping and freeing as it goes

Definition at line 438 of file EventLogger.cc.

Referenced by logImage(), logMessage(), logWebcam(), and processStateMachineEvent().

void EventLogger::dumpNode ( xmlNode node,
xmlDoc doc = NULL 
) [static, protected]

writes an xmlNode out over logSocket, freeing node when complete

uses doc if provided, otherwise makes a new temporary one which is then deleted again before the function returns

Definition at line 447 of file EventLogger.cc.

Referenced by dumpQueuedEvents(), and spider().


Member Data Documentation

EventLogger * EventLogger::theOne = NULL [static, protected]

the instance which will handle network communication

Definition at line 113 of file EventLogger.h.

Referenced by EventLogger(), EventLogger::StateMachineListener::processEvent(), and ~EventLogger().

handles state machine transitions if the Storyboard GUI (or other remote monitor) is listening for state machine events

Definition at line 123 of file EventLogger.h.

Referenced by runCommand().

std::string EventLogger::logfilePath [protected]

address of the logfile, if any (empty string is no logfile)

Definition at line 162 of file EventLogger.h.

Referenced by checkLogFile().

std::ofstream EventLogger::logfile [protected]

if a filename is given, events are logged to here

Definition at line 165 of file EventLogger.h.

Referenced by checkLogFile(), doSelect(), and processEvent().

Socket * EventLogger::logSocket = NULL [static, protected]

events which are logged will be sent over this port in an xml format. See eventlog.dtd in the docs directory

Definition at line 168 of file EventLogger.h.

Referenced by dumpNode(), EventLogger(), getLogSocket(), indent(), logImage(), logMessage(), logWebcam(), processEvent(), processStateMachineEvent(), runCommand(), and ~EventLogger().

int EventLogger::port = 10080 [static, protected]

port number logSocket will listen on

Definition at line 171 of file EventLogger.h.

Referenced by EventLogger(), getLogSocketPort(), and setLogSocketPort().

unsigned int EventLogger::logSocketRefCount = 0 [static, protected]

reference count for logSocket -- when this hits 0, close the socket

Definition at line 174 of file EventLogger.h.

Referenced by EventLogger(), and ~EventLogger().

unsigned int EventLogger::verbosity [protected]

controls the level of verbosity - currently 0 through 2

Definition at line 177 of file EventLogger.h.

Referenced by EventLogger(), and processEvent().

a set of state machine names which should have their subnodes monitored

Definition at line 182 of file EventLogger.h.

Referenced by isListening(), processStateMachineEvent(), and runCommand().

if logImage/logMessage/etc. are called during a transition, need to queue them until the transition event is complete

Definition at line 185 of file EventLogger.h.

Referenced by dumpQueuedEvents(), logImage(), logMessage(), logWebcam(), processStateMachineEvent(), and ~EventLogger().

if another transition occurs during the processing of another, have to recurse on processing the new transition first

Definition at line 188 of file EventLogger.h.

Referenced by logImage(), logMessage(), logWebcam(), and processStateMachineEvent().


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

Tekkotsu v4.0
Generated Thu Nov 22 00:58:20 2007 by Doxygen 1.5.4