| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | 
							- using Aitex.Core.RT.Fsm;
 
- using Aitex.Core.RT.Log;
 
- using System;
 
- using System.Collections.Generic;
 
- using System.Diagnostics;
 
- using System.Threading;
 
- namespace MECF.Framework.Common.Fsm
 
- {
 
-     public class ActiveFsm
 
-     {
 
-         public int FsmState
 
-         {
 
-             get { return _fsm.State; }
 
-         }
 
-         public string StringFsmStatus
 
-         {
 
-             get
 
-             {
 
-                 return _fsmStateMap.ContainsKey(FsmState) ? _fsmStateMap[FsmState] : FsmState.ToString();
 
-             }
 
-         }
 
-         Dictionary<int, string> _fsmStateMap = new Dictionary<int, string>();
 
-         Dictionary<int, string> _fsmMessageMap = new Dictionary<int, string>();
 
-         private Thread _thread = null;
 
-         private IStateMachine _fsm = null;
 
-         public ActiveFsm()
 
-         {
 
-             _fsm = new StateMachine();
 
-         }
 
-         public ActiveFsm(string name) : base()
 
-         {
 
-             _fsm = new StateMachine();
 
-         }
 
-         public void MapState(int state, string stringState)
 
-         {
 
-             _fsmStateMap[state] = stringState;
 
-         }
 
-         public void MapMessage(int msg, string stringMessage)
 
-         {
 
-             _fsmMessageMap[msg] = stringMessage;
 
-         }
 
-         public string GetStringMessage(int msg)
 
-         {
 
-             return _fsmMessageMap.ContainsKey(msg) ? _fsmMessageMap[msg] : msg.ToString();
 
-         }
 
-         protected void StartFsm(string name, int fsmInterval, int initState)
 
-         {
 
-             _fsm.Init(initState, fsmInterval);
 
-             _fsm.Name = name;
 
-             _fsm.Start();
 
-             _thread = new Thread(new ThreadStart(_fsm.Loop));
 
-             _thread.Name = _fsm.Name;
 
-             _thread.Start();
 
-             while (!_thread.IsAlive)
 
-                 Thread.Sleep(1);
 
-         }
 
-         protected void StopFsm()
 
-         {
 
-             if (_fsm == null)
 
-                 return;
 
-             {
 
-                 _fsm.Stop();
 
-             }
 
-             if (_thread != null)
 
-             {
 
-                 if (_thread.IsAlive)
 
-                 {
 
-                     Thread.Sleep(100);
 
-                     if (_thread.IsAlive)
 
-                     {
 
-                         try
 
-                         {
 
-                             _thread.Abort();
 
-                         }
 
-                         catch (Exception ex)
 
-                         {
 
-                             LOG.Error($" {_fsm.Name} FSM terminated, {ex.Message}");
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         protected void Transition<T, V>(T state, V msg, FsmFunc func, T next)
 
-         {
 
-             Debug.Assert(typeof(T).IsEnum && typeof(V).IsEnum);
 
-             int _state = Convert.ToInt32(state);
 
-             int _next = Convert.ToInt32(next);
 
-             int _msg = Convert.ToInt32(msg);
 
-             Transition(_state, _msg, func, _next);
 
-         }
 
-         protected void Transition(int state, int msg, FsmFunc func, int next)
 
-         {
 
-             if (_fsm != null)
 
-                 _fsm.Transition(state, msg, func, next);
 
-         }
 
-         protected void AnyStateTransition(int msg, FsmFunc func, int next)
 
-         {
 
-             if (_fsm != null)
 
-                 _fsm.AnyStateTransition(msg, func, next);
 
-         }
 
-         protected void AnyStateTransition<T, V>(V msg, FsmFunc func, T next)
 
-         {
 
-             Debug.Assert(typeof(T).IsEnum && typeof(V).IsEnum);
 
-             int _next = Convert.ToInt32(next);
 
-             int _msg = Convert.ToInt32(msg);
 
-             AnyStateTransition(_msg, func, _next);
 
-         }
 
-         protected void EnterExitTransition<T, V>(T state, FsmFunc enter, Nullable<V> msg, FsmFunc exit) where V : struct
 
-         {
 
-             Debug.Assert(typeof(T).IsEnum && ((msg == null) || typeof(V).IsEnum));
 
-             int _state = Convert.ToInt32(state);
 
-             int _msg = msg == null ? (int)FSM_MSG.NONE : Convert.ToInt32(msg);
 
-             EnterExitTransition(_state, enter, _msg, exit);
 
-         }
 
-         protected void EnterExitTransition(int state, FsmFunc enter, int msg, FsmFunc exit)
 
-         {
 
-             if (_fsm != null)
 
-                 _fsm.EnterExitTransition(state, enter, msg, exit);
 
-         }
 
-         public void PostMsg<T>(T msg, params object[] args) where T : struct
 
-         {
 
-             Debug.Assert(typeof(T).IsEnum);
 
-             int id = Convert.ToInt32(msg);
 
-             PostMsg(id, args);
 
-         }
 
-         public void PostMsg(int msg, params object[] args)
 
-         {
 
-             if (_fsm == null)
 
-             {
 
-                 LOG.Error($"fsm is null, post msg {msg}");
 
-                 return;
 
-             }
 
-             _fsm.PostMsgWithoutLock(msg, args);
 
-         }
 
-         public bool CheckToPostMessage(int msg, out string reason, params object[] args)
 
-         {
 
-             if (!_fsm.FindTransition(_fsm.State, msg))
 
-             {
 
-                 reason = $"{_fsm.Name} is in {StringFsmStatus} state,can not do {GetStringMessage(msg)}";
 
-                 return false;
 
-             }
 
-             _fsm.PostMsgWithoutLock(msg, args);
 
-             reason = string.Empty;
 
-             return true;
 
-         }
 
-     }
 
- }
 
 
  |