forked from nickglazer/python-state-machine-framework
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathActiveObject.py
More file actions
Latest commit
executable file
·48 lines (39 loc) · 1.29 KB
/
Copy pathActiveObject.py
File metadata and controls
executable file
·48 lines (39 loc) · 1.29 KB
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
importqueue
importthreading
classActiveObject(threading.Thread):
def__init__(self, name, publish, transitions={}):
threading.Thread.__init__(self)
self.name=name
self.q=queue.Queue()
self.publish=publish
self.transitions=transitions
self.state=None
defpost(self, event):
self.q.put(event)
defrun(self):
try:
event=self.q.get(block=False)
exceptExceptionaserr:
print(err)
return
try:
self.transitions[self.state]['transitions'][event.name]
exceptKeyError:
print('THROWING ON THE FLOOR...\n')
return
newState=self.transitions[self.state]['transitions'][event.name]
hold=self.state
try:
exit=self.transitions[self.state]['exit']
ifexit!=None:
getattr(self, exit)()
exceptKeyError:
pass
self.state=newState
try:
entry=self.transitions[self.state]['entry']
ifentry!=None:
getattr(self, entry)()
exceptKeyError:
pass
print('TRANSITION '+hold+' => '+self.state+'\n')