SampleFSM.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #ifndef __SAMPLE_FSM_H__
  2. #define __SAMPLE_FSM_H__
  3. #pragma once
  4. // This code is generated by spgenex tool!
  5. #include "SpFSM.h"
  6. #include "SampleEntity_def_g.h"
  7. using namespace SampleEntity;
  8. #define ENTITY_DEV_ID 0x103
  9. //
  10. // fsm event enum goes here
  11. //
  12. enum EvtType {
  13. EVT_USER_TEST_1 = (EVT_USER + 1),
  14. EVT_USER_TEST2 = (EVT_USER + 2),
  15. EVT_USER_TEST_3 = (EVT_USER + 3),
  16. EVT_USER_TEST_4 = (EVT_USER + 4),
  17. };
  18. class test2Event : public FSMEvent {
  19. public:
  20. test2Event() : FSMEvent(EVT_USER_TEST2){}
  21. ~test2Event(){}
  22. virtual void OnUnhandled() {
  23. Dbg("EVT_USER_TEST2 unhandled!");
  24. }
  25. };
  26. class test_3_event : public FSMEvent {
  27. public:
  28. test_3_event() : FSMEvent(EVT_USER_TEST_3){}
  29. ~test_3_event(){}
  30. virtual void OnUnhandled() {
  31. Dbg("EVT_USER_TEST_3 unhandled!");
  32. }
  33. };
  34. class test_4_event : public FSMEvent {
  35. public:
  36. test_4_event() : FSMEvent(EVT_USER_TEST_4){}
  37. ~test_4_event(){}
  38. virtual void OnUnhandled() {
  39. Dbg("EVT_USER_TEST_4 unhandled!");
  40. }
  41. };
  42. class CSampleFSM : public FSMImpl<CSampleFSM>
  43. {
  44. public:
  45. CSampleFSM(void);
  46. virtual ~CSampleFSM(void);
  47. virtual ErrorCodeEnum OnInit();
  48. virtual ErrorCodeEnum OnExit();
  49. void SelfTest(EntityTestEnum eTestType,CSmartPointer<ITransactionContext> pTransactionContext);
  50. //define the state enum.
  51. enum {s0, s1=0, s2=1};
  52. BEGIN_FSM_STATE(CSampleFSM)
  53. FSM_STATE_ENTRY(s0, "Idle", s0_on_entry, s0_on_exit, s0_on_event)
  54. FSM_STATE_ENTRY(s1, "Busy", s1_on_entry, s1_on_exit, s1_on_event)
  55. FSM_STATE_ENTRY(s2, "Fail", s2_on_entry, s2_on_exit, s2_on_event)
  56. END_FSM_STATE()
  57. BEGIN_FSM_RULE(CSampleFSM, s0)
  58. FSM_RULE_ENTRY(s1, s2, EVT_USER_TEST_1, 0)
  59. FSM_RULE_ENTRY(s1, s0, EVT_USER_TEST2, 1)
  60. FSM_RULE_ENTRY_RANGE(s1, s2, EVT_USER_TEST_3, 0, 3)
  61. FSM_RULE_ENTRY_ANY(s1, s2, EVT_USER_TEST_4)
  62. END_FSM_RULE()
  63. void s0_on_entry();
  64. void s0_on_exit();
  65. unsigned int s0_on_event(FSMEvent* event);
  66. void s1_on_entry();
  67. void s1_on_exit();
  68. unsigned int s1_on_event(FSMEvent* event);
  69. void s2_on_entry();
  70. void s2_on_exit();
  71. unsigned int s2_on_event(FSMEvent* event);
  72. private:
  73. //TODO:
  74. };
  75. class CSample2FSM : public FSMImpl<CSample2FSM>
  76. {
  77. public:
  78. CSample2FSM(void) {}
  79. virtual ~CSample2FSM(void) {}
  80. virtual ErrorCodeEnum OnInit() { return Error_NotImpl; }
  81. virtual ErrorCodeEnum OnExit() { return Error_NotImpl; }
  82. void SelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext) {
  83. pTransactionContext->SendAnswer(Error_Succeed);
  84. }
  85. //define the state enum.
  86. enum {s0, s1, s2, s3};
  87. BEGIN_FSM_STATE(CSample2FSM)
  88. FSM_STATE_ENTRY(s0, "Init", s0_on_entry, s0_on_exit, s0_on_event)
  89. FSM_STATE_ENTRY(s1, "Processing", s1_on_entry, s1_on_exit, s1_on_event)
  90. FSM_STATE_ENTRY(s2, "Rich", s2_on_entry, s2_on_exit, s2_on_event)
  91. FSM_STATE_ENTRY(s3, "Old", s3_on_entry, s3_on_exit, s3_on_event)
  92. END_FSM_STATE()
  93. BEGIN_FSM_RULE(CSample2FSM, s0)
  94. FSM_RULE_ENTRY(s1, s2, EVT_USER_TEST_1, 0)
  95. FSM_RULE_ENTRY(s1, s0, EVT_USER_TEST2, 1)
  96. FSM_RULE_ENTRY_RANGE(s1, s2, EVT_USER_TEST_3, 0, 3)
  97. FSM_RULE_ENTRY_ANY(s1, s2, EVT_USER_TEST_4)
  98. END_FSM_RULE()
  99. void s0_on_entry() {}
  100. void s0_on_exit() {}
  101. unsigned int s0_on_event(FSMEvent* event) { return 0; }
  102. void s1_on_entry() {}
  103. void s1_on_exit() {}
  104. unsigned int s1_on_event(FSMEvent* event) { return 0; }
  105. void s2_on_entry() {}
  106. void s2_on_exit() {}
  107. unsigned int s2_on_event(FSMEvent* event) { return 0; }
  108. void s3_on_entry() {}
  109. void s3_on_exit() {}
  110. unsigned int s3_on_event(FSMEvent* event) { return 0; }
  111. private:
  112. //TODO:
  113. };
  114. #endif // __SAMPLE_FSM_H__