123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Aitex.Core.RT.Fsm
- {
- public class DemoEntity : Entity
- {
- public enum STATE
- {
- IDLE,
- RUN,
- ERROR,
- }
- public enum MSG
- {
- INIT,
- RUN,
- STOP,
- ERROR,
- }
- public static void Testcase()
- {
- DemoEntity demo = new DemoEntity();
- demo.Initialize();
- Console.WriteLine("DemoEntity Unit Test.");
- Console.WriteLine("Input \"exit\" for terminate.");
- string cmd;
- while ((cmd = Console.ReadLine()) != "exit")
- {
- switch (cmd)
- {
- case "run":
- demo.PostMsg<DemoEntity.MSG>(DemoEntity.MSG.RUN, null);
- break;
- case "init":
- demo.PostMsg<DemoEntity.MSG>(DemoEntity.MSG.INIT, null);
- break;
- case "stop":
- demo.PostMsg<DemoEntity.MSG>(DemoEntity.MSG.STOP, null);
- break;
- case "error":
- demo.PostMsg<DemoEntity.MSG>(DemoEntity.MSG.ERROR, null);
- break;
- }
- }
- demo.Terminate();
- Console.WriteLine("Input any key for quite.");
- Console.Read();
- Console.WriteLine("DemoEntity Unit Test end");
- }
- public DemoEntity()
- {
- fsm = new StateMachine<DemoEntity>("Demo", (int)STATE.IDLE, 3000);
- EnterExitTransition<STATE, MSG>(STATE.IDLE, EnterIdel, null, null);
- AnyStateTransition(MSG.ERROR, Error, STATE.ERROR);
- Transition(STATE.IDLE, MSG.RUN, Run, STATE.RUN);
- Transition(STATE.ERROR, MSG.INIT, Init, STATE.IDLE);
- Transition(STATE.RUN, MSG.STOP, null, STATE.IDLE);
- Transition(STATE.RUN, FSM_MSG.TIMER, OnTimeout, STATE.RUN);
- }
- private bool Run(object[] objs)
- {
- Console.WriteLine("Demo Run");
- return true;
- }
- private bool Init(object[] objs)
- {
- Console.WriteLine("Demo Init");
- return true;
- }
- private bool Error(object[] objs)
- {
- Console.WriteLine("Demo Error");
- return true;
- }
- private bool EnterIdel(object[] objs)
- {
- Console.WriteLine("Enter idle state");
- return true;
- }
- private bool OnTimeout(object[] objs)
- {
- if (fsm.ElapsedTime > 10000)
- {
- Console.WriteLine("Demo run is timeout");
- PostMsg<MSG>(MSG.ERROR);
- }
- else
- {
- Console.WriteLine("Demo run recive timer msg");
- }
- return true;
- }
- }
- }
|