-
Notifications
You must be signed in to change notification settings - Fork 0
/
state.py
51 lines (40 loc) · 1.33 KB
/
state.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class State:
def __init__ (self, machine, name, enter, exit, handle, subMachineClass):
self._machine = machine
self._name = name
self._enter = enter
self._exit = exit
self._handle = handle
self._subMachineClass = subMachineClass
self._subMachine = None
def __repr__ (self):
return f'<state {self.name}>'
def enter (self):
if self._subMachineClass:
self._subMachine = self._subMachineClass (self.wrapper (), f'{self._subMachineClass.__name__}')
self._enter ()
def exit (self):
if self._subMachine:
self._subMachine.exit ()
self._exit ()
def handle (self, message):
r = self._handle (message)
if (not r):
r = self.delegate (message)
return r
def name (self):
subname = ''
if self._subMachine:
subname = ':' + self._subMachine.name ()
return f'{self.baseName ()}{subname}'
def baseName (self):
return self._name
def wrapper (self):
return self._machine.wrapper ()
def next (self, nextStateName):
self._machine.next (nextStateName)
def delegate (self, message):
if self._subMachine:
return self._subMachine.handle (message)
else:
return False