10 #include <boost/optional.hpp>
11 #include <boost/bind.hpp>
12 #include <boost/statechart/event.hpp>
13 #include <boost/statechart/transition.hpp>
14 #include <boost/statechart/state_machine.hpp>
15 #include <boost/statechart/simple_state.hpp>
16 #include <boost/statechart/custom_reaction.hpp>
17 #include <boost/mpl/list.hpp>
21 namespace mpl = boost::mpl;
22 namespace sc = boost::statechart;
42 public sc::state_machine<StateMachineImpl, DownState> {
50 LOG(DEBUG,
"StateMachine state: " << state);
54 LOG(ERROR,
"StateMachine cb initialized: "
55 <<
cb_.is_initialized() <<
" session: " <<
session_);
96 boost::optional<ChangeCb>
cb_;
101 struct InitState : sc::simple_state<InitState, StateMachineImpl>,
104 sc::transition<EvRecvInit, UpState>,
105 sc::transition<EvRecvDown, InitState>,
106 sc::transition<EvRecvUp, UpState>,
107 sc::transition<EvRecvAdminDown, DownState>,
108 sc::transition<EvTimeout, DownState>
116 sc::transition<EvRecvInit, UpState>,
117 sc::transition<EvRecvDown, DownState>,
118 sc::transition<EvRecvUp, UpState>,
119 sc::transition<EvRecvAdminDown, DownState>,
120 sc::transition<EvTimeout, DownState>
126 struct DownState : sc::simple_state<DownState, StateMachineImpl>,
129 sc::transition<EvRecvInit, UpState>,
130 sc::transition<EvRecvDown, InitState>,
131 sc::transition<EvRecvUp, DownState>,
132 sc::transition<EvRecvAdminDown, DownState>,
133 sc::transition<EvTimeout, DownState>
const SessionKey & key() const
void Notify(BFDState state)
boost::optional< ChangeCb > cb_
virtual BFDState getState() const
mpl::list< sc::transition< EvRecvInit, UpState >, sc::transition< EvRecvDown, InitState >, sc::transition< EvRecvUp, DownState >, sc::transition< EvRecvAdminDown, DownState >, sc::transition< EvTimeout, DownState > > reactions
StateMachineImpl(EventManager *evm, Session *session)
StateMachine * CreateStateMachine(EventManager *evm, Session *session)
virtual BFDState getState() const
mpl::list< sc::transition< EvRecvInit, UpState >, sc::transition< EvRecvDown, DownState >, sc::transition< EvRecvUp, UpState >, sc::transition< EvRecvAdminDown, DownState >, sc::transition< EvTimeout, DownState > > reactions
mpl::list< sc::transition< EvRecvInit, UpState >, sc::transition< EvRecvDown, InitState >, sc::transition< EvRecvUp, UpState >, sc::transition< EvRecvAdminDown, DownState >, sc::transition< EvTimeout, DownState > > reactions
void SetCallback(boost::optional< ChangeCb > cb)
#define LOG(_Level, _Msg)
virtual BFDState getState() const
void ProcessRemoteState(BFDState state)
virtual BFDState getState() const =0