$search
00001 #ifndef _H_BONDSM_SM 00002 #define _H_BONDSM_SM 00003 00004 /* 00005 * ex: set ro: 00006 * DO NOT EDIT. 00007 * generated by smc (http://smc.sourceforge.net/) 00008 * from file : BondSM_sm.sm 00009 */ 00010 00011 00012 #define SMC_USES_IOSTREAMS 00013 00014 #include <statemap.h> 00015 00016 // Forward declarations. 00017 class SM; 00018 class SM_WaitingForSister; 00019 class SM_Alive; 00020 class SM_AwaitSisterDeath; 00021 class SM_Dead; 00022 class SM_Default; 00023 class BondSMState; 00024 class BondSMContext; 00025 class BondSM; 00026 00027 class BondSMState : 00028 public statemap::State 00029 { 00030 public: 00031 00032 BondSMState(const char *name, int stateId) 00033 : statemap::State(name, stateId) 00034 {}; 00035 00036 virtual void Entry(BondSMContext&) {}; 00037 virtual void Exit(BondSMContext&) {}; 00038 00039 virtual void ConnectTimeout(BondSMContext& context); 00040 virtual void Die(BondSMContext& context); 00041 virtual void DisconnectTimeout(BondSMContext& context); 00042 virtual void HeartbeatTimeout(BondSMContext& context); 00043 virtual void SisterAlive(BondSMContext& context); 00044 virtual void SisterDead(BondSMContext& context); 00045 00046 protected: 00047 00048 virtual void Default(BondSMContext& context); 00049 }; 00050 00051 class SM 00052 { 00053 public: 00054 00055 static SM_WaitingForSister WaitingForSister; 00056 static SM_Alive Alive; 00057 static SM_AwaitSisterDeath AwaitSisterDeath; 00058 static SM_Dead Dead; 00059 }; 00060 00061 class SM_Default : 00062 public BondSMState 00063 { 00064 public: 00065 00066 SM_Default(const char *name, int stateId) 00067 : BondSMState(name, stateId) 00068 {}; 00069 00070 }; 00071 00072 class SM_WaitingForSister : 00073 public SM_Default 00074 { 00075 public: 00076 SM_WaitingForSister(const char *name, int stateId) 00077 : SM_Default(name, stateId) 00078 {}; 00079 00080 void ConnectTimeout(BondSMContext& context); 00081 void Die(BondSMContext& context); 00082 void SisterAlive(BondSMContext& context); 00083 void SisterDead(BondSMContext& context); 00084 }; 00085 00086 class SM_Alive : 00087 public SM_Default 00088 { 00089 public: 00090 SM_Alive(const char *name, int stateId) 00091 : SM_Default(name, stateId) 00092 {}; 00093 00094 void Die(BondSMContext& context); 00095 void HeartbeatTimeout(BondSMContext& context); 00096 void SisterAlive(BondSMContext& context); 00097 void SisterDead(BondSMContext& context); 00098 }; 00099 00100 class SM_AwaitSisterDeath : 00101 public SM_Default 00102 { 00103 public: 00104 SM_AwaitSisterDeath(const char *name, int stateId) 00105 : SM_Default(name, stateId) 00106 {}; 00107 00108 void Die(BondSMContext& context); 00109 void DisconnectTimeout(BondSMContext& context); 00110 void HeartbeatTimeout(BondSMContext& context); 00111 void SisterAlive(BondSMContext& context); 00112 void SisterDead(BondSMContext& context); 00113 }; 00114 00115 class SM_Dead : 00116 public SM_Default 00117 { 00118 public: 00119 SM_Dead(const char *name, int stateId) 00120 : SM_Default(name, stateId) 00121 {}; 00122 00123 void ConnectTimeout(BondSMContext& context); 00124 void Die(BondSMContext& context); 00125 void DisconnectTimeout(BondSMContext& context); 00126 void HeartbeatTimeout(BondSMContext& context); 00127 void SisterAlive(BondSMContext& context); 00128 void SisterDead(BondSMContext& context); 00129 }; 00130 00131 class BondSMContext : 00132 public statemap::FSMContext 00133 { 00134 public: 00135 00136 BondSMContext(BondSM& owner) 00137 : FSMContext(SM::WaitingForSister), 00138 _owner(owner) 00139 {}; 00140 00141 BondSMContext(BondSM& owner, const statemap::State& state) 00142 : FSMContext(state), 00143 _owner(owner) 00144 {}; 00145 00146 virtual void enterStartState() 00147 { 00148 getState().Entry(*this); 00149 return; 00150 } 00151 00152 BondSM& getOwner() const 00153 { 00154 return (_owner); 00155 }; 00156 00157 BondSMState& getState() const 00158 { 00159 if (_state == NULL) 00160 { 00161 throw statemap::StateUndefinedException(); 00162 } 00163 00164 return (dynamic_cast<BondSMState&>(*_state)); 00165 }; 00166 00167 void ConnectTimeout() 00168 { 00169 (getState()).ConnectTimeout(*this); 00170 }; 00171 00172 void Die() 00173 { 00174 (getState()).Die(*this); 00175 }; 00176 00177 void DisconnectTimeout() 00178 { 00179 (getState()).DisconnectTimeout(*this); 00180 }; 00181 00182 void HeartbeatTimeout() 00183 { 00184 (getState()).HeartbeatTimeout(*this); 00185 }; 00186 00187 void SisterAlive() 00188 { 00189 (getState()).SisterAlive(*this); 00190 }; 00191 00192 void SisterDead() 00193 { 00194 (getState()).SisterDead(*this); 00195 }; 00196 00197 private: 00198 00199 BondSM& _owner; 00200 }; 00201 00202 00203 /* 00204 * Local variables: 00205 * buffer-read-only: t 00206 * End: 00207 */ 00208 00209 #endif // _H_BONDSM_SM