Starting the work on the polling state machine
[theonering] / hand_tests / sm.py
1 #!/usr/bin/env python
2
3 import threading
4 import datetime
5 import time
6
7 import gtk
8
9 import sys
10 sys.path.insert(0,"../src")
11 import gvoice.state_machine as state_machine
12
13
14 class _I(object):
15
16         def __init__(self, startTime):
17                 self._startTime = startTime
18
19         def update(self, force = False):
20                 print "%s\t%r: force=%r" % (datetime.datetime.now() - self._startTime, self, force)
21
22
23 def loop(state):
24
25         def actual():
26                 while state[0]:
27                         gtk.main_iteration(block=False)
28                         time.sleep(0.1)
29
30         return actual
31
32
33 def main():
34         startTime = datetime.datetime.now()
35
36         state = [True]
37         mainLoop = threading.Thread(target=loop(state))
38         mainLoop.setDaemon(False)
39         mainLoop.start()
40         try:
41                 state_machine.StateMachine._IS_DAEMON = False
42
43                 initial = _I(startTime)
44                 print "Initial:", initial
45                 regular = _I(startTime)
46                 print "Regular:", regular
47
48                 sm = state_machine.StateMachine([initial], [regular])
49                 print "Starting", datetime.datetime.now() - startTime
50                 sm.start()
51                 time.sleep(60.0) # seconds
52                 print "Reseting timers", datetime.datetime.now() - startTime
53                 sm.reset_timers()
54                 time.sleep(60.0) # seconds
55                 print "Switching to IDLE", datetime.datetime.now() - startTime
56                 sm.set_state(state_machine.StateMachine.STATE_IDLE)
57                 time.sleep(10.0) # seconds
58                 print "Stopping", datetime.datetime.now() - startTime
59                 sm.stop()
60         finally:
61                 state[0] = False
62
63
64 if __name__ == "__main__":
65         print state_machine.StateMachine._INITIAL_ACTIVE_PERIOD
66         print state_machine.StateMachine._FINAL_ACTIVE_PERIOD
67         print state_machine.StateMachine._IDLE_PERIOD
68         main()