Public メソッド | |
| def | __init__ |
| コンストラクタ | |
| def | setNOP |
| NOP関数を登録する | |
| def | setListener |
| Listener オブジェクトを登録する | |
| def | setEntryAction |
| Entry action 関数を登録する | |
| def | setPreDoAction |
| PreDo action 関数を登録する | |
| def | setDoAction |
| Do action 関数を登録する | |
| def | setPostDoAction |
| PostDo action 関数を登録する | |
| def | setExitAction |
| Exit action 関数を登録する | |
| def | setTransitionAction |
| State transition action 関数を登録する | |
| def | setStartState |
| 初期状態をセットする | |
| def | getStates |
| 状態を取得する | |
| def | getState |
| 現在の状態を取得する | |
| def | isIn |
| 現在状態を確認 | |
| def | goTo |
| 状態を遷移 | |
| def | worker |
| 駆動関数 | |
| def | setNullFunc |
| NOP関数を設定 | |
| def | sync |
| 状態の同期処理 | |
| def | need_trans |
| 遷移の必要性チェック | |
| def | update_curr |
| 現在状態の更新 | |
StateMachine クラスは状態マシンを実現するクラスである。
例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。 状態は3状態 INACTIVE, ACTIVE, ERROR があり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現される。
class ActiveObject:
class MyState:
INACTIVE, ACTIVE, ERROR = range(3)
def __init__(self):
m_sm = StateMachine(3)
m_sm.setNOP(nullAction)
m_sm.setListener(self)
m_sm.setExitAction(MyState.INACTIVE, self.inactiveExit)
:
m_sm.setPostDoAction(MyState.ERROR, self.errorPostDo)
m_sm.setTransitionAction(self.transition);
def nullAction(myStates):
pass
def inactiveExit(myStates):
pass
:
def errorPostDo(myStates):
pass
def transition(myStates:
pass
状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。 このクラスは、一つの状態に対して、
このクラスは以下のようなタイミングで各アクションが実行される。
StateMachine.py の 156 行で定義されています。
| def __init__ | ( | self, | ||
| num_of_state | ||||
| ) |
| def setNOP | ( | self, | ||
| call_back | ||||
| ) |
| def setListener | ( | self, | ||
| listener | ||||
| ) |
Listener オブジェクトを登録する
各種アクション実行時に呼び出される Listener オブジェクトを登録する。
| self | ||
| listener | Listener オブジェクト |
StateMachine.py の 226 行で定義されています。
| def setEntryAction | ( | self, | ||
| state, | ||||
| call_back | ||||
| ) |
Entry action 関数を登録する
各状態に入った際に実行される Entry action 用コールバック関数を登録する。
| self | ||
| state | 登録対象状態 | |
| call_back | Entry action 用コールバック関数 |
StateMachine.py の 245 行で定義されています。
| def setPreDoAction | ( | self, | ||
| state, | ||||
| call_back | ||||
| ) |
PreDo action 関数を登録する
各状態内で実行される PreDo action 用コールバック関数を登録する。
| self | ||
| state | 登録対象状態 | |
| call_back | PreDo action 用コールバック関数 |
StateMachine.py の 268 行で定義されています。
| def setDoAction | ( | self, | ||
| state, | ||||
| call_back | ||||
| ) |
Do action 関数を登録する
各状態内で実行される Do action 用コールバック関数を登録する。
| self | ||
| state | 登録対象状態 | |
| call_back | Do action 用コールバック関数 |
StateMachine.py の 291 行で定義されています。
| def setPostDoAction | ( | self, | ||
| state, | ||||
| call_back | ||||
| ) |
PostDo action 関数を登録する
各状態内で実行される PostDo action 用コールバック関数を登録する。
| self | ||
| state | 登録対象状態 | |
| call_back | PostDo action 用コールバック関数 |
StateMachine.py の 314 行で定義されています。
| def setExitAction | ( | self, | ||
| state, | ||||
| call_back | ||||
| ) |
Exit action 関数を登録する
各状態内で実行される Exit action 用コールバック関数を登録する。
| self | ||
| state | 登録対象状態 | |
| call_back | Exit action 用コールバック関数 |
StateMachine.py の 337 行で定義されています。
| def setTransitionAction | ( | self, | ||
| call_back | ||||
| ) |
State transition action 関数を登録する
状態遷移時に実行される State transition action 用コールバック関数を 登録する。
| self | ||
| call_back | State transition 用コールバック関数 |
StateMachine.py の 360 行で定義されています。
| def setStartState | ( | self, | ||
| states | ||||
| ) |
| def getStates | ( | self | ) |
状態を取得する
状態情報を取得する。 現在の状態、1つ前の状態、遷移予定の状態を取得することができる。
| self |
StateMachine.py の 398 行で定義されています。
| def getState | ( | self | ) |
| def isIn | ( | self, | ||
| state | ||||
| ) |
現在状態を確認
現在の状態が、引数で指定した状態と一致するか確認する。
| self | ||
| state | 確認対象状態 |
StateMachine.py の 435 行で定義されています。
| def goTo | ( | self, | ||
| state | ||||
| ) |
状態を遷移
指定した状態に状態を遷移する。 本関数は次状態を強制的にセットする関数である。 このため、遷移の可否は、ユーザが現在状態を取得し判断するロジックを 実装しなければならない。 遷移先が現在の状態と同じ場合には、自己遷移フラグをセットする。
| self | ||
| state | 遷移先状態 |
StateMachine.py の 459 行で定義されています。
| def worker | ( | self | ) |
| def setNullFunc | ( | self, | ||
| s, | ||||
| nullfunc | ||||
| ) |
NOP関数を設定
NOP関数(何もしない関数)を登録する。
| self | ||
| s | コールバック関数設定先 | |
| nullfunc | コールバック関数(NOP関数) |
StateMachine.py の 524 行で定義されています。
| def sync | ( | self, | ||
| states | ||||
| ) |
| def need_trans | ( | self | ) |
| def update_curr | ( | self, | ||
| curr | ||||
| ) |
1.5.4