MIRA
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | List of all members
StateMachine Class Reference

SCXML based state machine interpreter. More...

#include <sm/StateMachine.h>

Classes

struct  EventLessComp
 

Public Types

typedef iterable_priority_queue< Event, std::vector< Event >, EventLessCompEventQueue
 

Public Member Functions

 StateMachine (Authority *authority=NULL, const std::string &name="")
 
 ~StateMachine ()
 
template<typename Reflector >
void reflect (Reflector &r)
 
void load (const Path &filename)
 Load a state machine configuration from a scxml file. More...
 
void run ()
 Starts the interpreter. More...
 
void interrupt ()
 Interrupt the interpreter. More...
 
void sendEvent (const Event &event)
 Send an event to the state machine. More...
 
void sendEventByName (const std::string &event)
 Send an event by name to the state machine. More...
 
void sendEventByName (const std::string &event, const std::string &jsonData)
 
void sendEventByName (const std::string &event, const std::string &jsonData, const uint64 delay)
 
void cancelEvent (const std::string &sendid)
 Cancels an delayed event. More...
 
bool inState (const std::string &state) const
 Checks if the state machines current configuration contains the given state (meaning the given state is active) More...
 
bool isRunning () const
 Returns if the interpreter is running. More...
 
void printStates ()
 Prints the states and transitions to console. More...
 
std::set< std::string > getConfiguration () const
 
void addListener (StateMachineListener *listener)
 Add a listener that gets notified on each state exit, state entry and whenever a transition is executed. More...
 
std::string getNamespace () const
 Gets namespace from authority. More...
 
std::string resolveName (const std::string &name) const
 Call resolveName on the authority that is coupled with the state machine. More...
 
std::string resolveServiceName (const std::string &name) const
 Call resolveServiceName on the authority that is coupled with the state machine. More...
 

Public Attributes

std::string mName
 
XMLDom mDocument
 
uint32 mCurrentID
 
TransitionTargetPtr mSCXML
 
std::string mBinding
 
std::map< std::string, TransitionTargetPtrmTargets
 
std::map< std::string, TransitionTargetSetmHistoryValue
 
boost::mutex mRunMutex
 
bool mRunning
 
TransitionTargetSet mConfiguration
 
EventQueue mInternalEvents
 
EventQueue mExternalEvents
 
std::set< std::string > mSubscribedChannels
 
Channel< std::set< std::string > > mStateChannel
 
Channel< std::set< std::string > > mCompressedStateChannel
 
Event mCurrentEvent
 
std::vector< StateMachineListener * > mListener
 
boost::python::object mPythonContext
 
AuthoritymParentAuthority
 
boost::shared_ptr< AuthoritymAuthority
 

Protected Member Functions

void onChannelData (ChannelRead< void > data)
 
void executeContent (XMLDom::iterator executable)
 
void executePython (const std::string &script, bool ignoreErrors=false)
 
void executeTransitionContent (TransitionList &t)
 
void createDataModel (TransitionTargetPtr t)
 
void setDataModel (TransitionTargetPtr t)
 
bool isInFinalState (TransitionTargetPtr s)
 
bool isType1 (TransitionPtr t)
 
bool isType2 (TransitionPtr t)
 
bool isType3 (TransitionPtr t)
 
bool preemtsTransition (TransitionPtr t1, TransitionPtr t2)
 
TransitionList filterPreempted (TransitionList &enabledTransitions)
 
bool matchesCondition (const std::string &condition)
 
TransitionList selectTransitions (const std::string &event)
 
TransitionList selectEventlessTransitions ()
 
void enterStates (TransitionList &tlist)
 
void exitStates (TransitionList &tlist)
 
void addStatesToEnter (TransitionTargetPtr t, TransitionTargetSet &statesToEnter, TransitionTargetSet &statesForDefaultEntry)
 
TransitionTargetList getTargetStates (const std::string &target)
 
void microstep (TransitionList &enabledTransitions)
 
TransitionPtr parseTransition (XMLDom::iterator node, TransitionTargetPtr source)
 
void parseDataModel (XMLDom::iterator node, TransitionTargetPtr parent)
 
FinalStatePtr parseFinal (XMLDom::iterator node, TransitionTargetPtr parent)
 
HistoryStatePtr parseHistory (XMLDom::iterator node, TransitionTargetPtr parent)
 
TransitionTargetPtr parseState (XMLDom::iterator node, TransitionTargetPtr parent)
 
TransitionTargetPtr parseParallel (XMLDom::iterator node, TransitionTargetPtr parent)
 
void parseScriptSrc (XMLDom::iterator node)
 
void parseExecutableContent (XMLDom::iterator node, const std::string &nodeInfo="")
 
void publishConfiguration ()
 

Detailed Description

SCXML based state machine interpreter.

Member Typedef Documentation

◆ EventQueue

Constructor & Destructor Documentation

◆ StateMachine()

StateMachine ( Authority authority = NULL,
const std::string &  name = "" 
)

◆ ~StateMachine()

Member Function Documentation

◆ reflect()

void reflect ( Reflector &  r)
inline

◆ load()

void load ( const Path filename)

Load a state machine configuration from a scxml file.

◆ run()

void run ( )

Starts the interpreter.

This method blocks until the state machine reaches a final configuration.

◆ interrupt()

void interrupt ( )
inline

Interrupt the interpreter.

◆ sendEvent()

void sendEvent ( const Event event)

Send an event to the state machine.

◆ sendEventByName() [1/3]

void sendEventByName ( const std::string &  event)
inline

Send an event by name to the state machine.

◆ sendEventByName() [2/3]

void sendEventByName ( const std::string &  event,
const std::string &  jsonData 
)
inline

◆ sendEventByName() [3/3]

void sendEventByName ( const std::string &  event,
const std::string &  jsonData,
const uint64  delay 
)

◆ cancelEvent()

void cancelEvent ( const std::string &  sendid)

Cancels an delayed event.

The event will be marked as 'canceled' and not processed later.

◆ inState()

bool inState ( const std::string &  state) const

Checks if the state machines current configuration contains the given state (meaning the given state is active)

◆ isRunning()

bool isRunning ( ) const
inline

Returns if the interpreter is running.

◆ printStates()

void printStates ( )

Prints the states and transitions to console.

◆ getConfiguration()

std::set<std::string> getConfiguration ( ) const

◆ addListener()

void addListener ( StateMachineListener listener)

Add a listener that gets notified on each state exit, state entry and whenever a transition is executed.

◆ getNamespace()

std::string getNamespace ( ) const

Gets namespace from authority.

Returns "/" if no authority exists.

◆ resolveName()

std::string resolveName ( const std::string &  name) const

Call resolveName on the authority that is coupled with the state machine.

Returns the given name if no authority exists.

◆ resolveServiceName()

std::string resolveServiceName ( const std::string &  name) const

Call resolveServiceName on the authority that is coupled with the state machine.

Returns the given name if no authority exists.

◆ onChannelData()

void onChannelData ( ChannelRead< void >  data)
protected

◆ executeContent()

void executeContent ( XMLDom::iterator  executable)
protected

◆ executePython()

void executePython ( const std::string &  script,
bool  ignoreErrors = false 
)
protected

◆ executeTransitionContent()

void executeTransitionContent ( TransitionList t)
protected

◆ createDataModel()

void createDataModel ( TransitionTargetPtr  t)
protected

◆ setDataModel()

void setDataModel ( TransitionTargetPtr  t)
protected

◆ isInFinalState()

bool isInFinalState ( TransitionTargetPtr  s)
protected

◆ isType1()

bool isType1 ( TransitionPtr  t)
protected

◆ isType2()

bool isType2 ( TransitionPtr  t)
protected

◆ isType3()

bool isType3 ( TransitionPtr  t)
protected

◆ preemtsTransition()

bool preemtsTransition ( TransitionPtr  t1,
TransitionPtr  t2 
)
protected

◆ filterPreempted()

TransitionList filterPreempted ( TransitionList enabledTransitions)
protected

◆ matchesCondition()

bool matchesCondition ( const std::string &  condition)
protected

◆ selectTransitions()

TransitionList selectTransitions ( const std::string &  event)
protected

◆ selectEventlessTransitions()

TransitionList selectEventlessTransitions ( )
protected

◆ enterStates()

void enterStates ( TransitionList tlist)
protected

◆ exitStates()

void exitStates ( TransitionList tlist)
protected

◆ addStatesToEnter()

void addStatesToEnter ( TransitionTargetPtr  t,
TransitionTargetSet statesToEnter,
TransitionTargetSet statesForDefaultEntry 
)
protected

◆ getTargetStates()

TransitionTargetList getTargetStates ( const std::string &  target)
protected

◆ microstep()

void microstep ( TransitionList enabledTransitions)
protected

◆ parseTransition()

TransitionPtr parseTransition ( XMLDom::iterator  node,
TransitionTargetPtr  source 
)
protected

◆ parseDataModel()

void parseDataModel ( XMLDom::iterator  node,
TransitionTargetPtr  parent 
)
protected

◆ parseFinal()

FinalStatePtr parseFinal ( XMLDom::iterator  node,
TransitionTargetPtr  parent 
)
protected

◆ parseHistory()

HistoryStatePtr parseHistory ( XMLDom::iterator  node,
TransitionTargetPtr  parent 
)
protected

◆ parseState()

TransitionTargetPtr parseState ( XMLDom::iterator  node,
TransitionTargetPtr  parent 
)
protected

◆ parseParallel()

TransitionTargetPtr parseParallel ( XMLDom::iterator  node,
TransitionTargetPtr  parent 
)
protected

◆ parseScriptSrc()

void parseScriptSrc ( XMLDom::iterator  node)
protected

◆ parseExecutableContent()

void parseExecutableContent ( XMLDom::iterator  node,
const std::string &  nodeInfo = "" 
)
protected

◆ publishConfiguration()

void publishConfiguration ( )
protected

Member Data Documentation

◆ mName

std::string mName

◆ mDocument

XMLDom mDocument

◆ mCurrentID

uint32 mCurrentID

◆ mSCXML

◆ mBinding

std::string mBinding

◆ mTargets

std::map<std::string, TransitionTargetPtr> mTargets

◆ mHistoryValue

std::map<std::string, TransitionTargetSet> mHistoryValue

◆ mRunMutex

boost::mutex mRunMutex
mutable

◆ mRunning

bool mRunning

◆ mConfiguration

TransitionTargetSet mConfiguration

◆ mInternalEvents

EventQueue mInternalEvents

◆ mExternalEvents

EventQueue mExternalEvents

◆ mSubscribedChannels

std::set<std::string> mSubscribedChannels

◆ mStateChannel

Channel<std::set<std::string> > mStateChannel

◆ mCompressedStateChannel

Channel<std::set<std::string> > mCompressedStateChannel

◆ mCurrentEvent

Event mCurrentEvent

◆ mListener

std::vector<StateMachineListener*> mListener

◆ mPythonContext

boost::python::object mPythonContext

◆ mParentAuthority

Authority* mParentAuthority

◆ mAuthority

boost::shared_ptr<Authority> mAuthority

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