From a05dfd226f0b41c040a0b7e5cd61be1f22db81a2 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 14 Oct 2013 19:22:22 +0200 Subject: [PATCH 1/1] Make nervlists relative --- statemachine.odg | Bin 16453 -> 16850 bytes statemachine.py | 32 ++++++++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/statemachine.odg b/statemachine.odg index 64b3cebbac907a6b1941c82b35deab817b6c0882..883e18348f8e3399d346b2f5c278b9c666b1d12a 100644 GIT binary patch delta 9193 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 MK@aaI{*M6v3syTHm;e9( delta 8901 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 diff --git a/statemachine.py b/statemachine.py index 6a3e889..f2cac47 100644 --- a/statemachine.py +++ b/statemachine.py @@ -44,13 +44,17 @@ class Nerver(): # If f returns something, that's also returned by nerv. def __init__(self, nervlist): self.nervlist = list(nervlist) + self.last_event_time = time.time() - def nerv(self, total_time): + def nerv(self): if len(self.nervlist): (time, f) = self.nervlist[0] + now = time.time() + time_gone = now-self.last_event_time # check if the first element is to be triggered - if time >= total_time: + if time_gone >= time: self.nervlist = self.nervlist[1:] # "pop" the first element, but do not modify original list + self.last_event_time = now return f() @@ -65,7 +69,6 @@ class StateMachine(): class State(): def __init__(self, state_machine, nervlist = None): self.state_machine = state_machine - self.time_entered = time.time() self._nerver = None if nervlist is None else Nerver(nervlist) def handle_pins_event(self): pass # one needn't implement this @@ -77,7 +80,7 @@ class StateMachine(): arg("412 Precondition Failed: The current state (%s) cannot handle the OPEN event" % self.__class__.__name__) def handle_wakeup_event(self): if self._nerver is not None: - return self._nerver.nerv(time.time() - self.time_entered) + return self._nerver.nerv() def pins(self): return self.state_machine.pins def actor(self): @@ -119,8 +122,8 @@ class StateMachine(): class StateUnlocking(State): def __init__(self,callback,sm): # construct a nervlist - nervlist = [(t*OPEN_REPEAT_TIMEOUT, lambda: self.actor().act(Actor.CMD_UNLOCK)) for t in xrange(1, OPEN_REPEAT_NUMBER+1)] - nervlist += [((OPEN_REPEAT_NUMBER+1)*OPEN_REPEAT_TIMEOUT, self.could_not_open)] + nervlist = [(OPEN_REPEAT_TIMEOUT, lambda: self.actor().act(Actor.CMD_UNLOCK)) for t in xrange(OPEN_REPEAT_NUMBER)] + nervlist += [(OPEN_REPEAT_TIMEOUT, self.could_not_open)] super().__init__(sm,nervlist) self.callbacks=[callback] # FIXME: can we send "202 processing: Trying to open the door" here? Are the callbacks multi-use? @@ -183,14 +186,13 @@ class StateMachine(): logger.error("door manually locked, but space switch on - going to StateZu") play_sound("manual_lock") return StateZu(self.state_machine) - # handle_wakeup_event intentionally not overwritten class StateLocking(State): # FIXME: Why does this even have callbacks? # TODO: share code with StateUnlocking def __init__(self,sm): # construct a nervlist - nervlist = [(t*CLOSE_REPEAT_TIMEOUT, lambda: self.actor().act(Actor.CMD_LOCK)) for t in xrange(1, CLOSE_REPEAT_NUMBER+1)] + nervlist = [(t*CLOSE_REPEAT_TIMEOUT, lambda: self.actor().act(Actor.CMD_LOCK)) for t in range(1, CLOSE_REPEAT_NUMBER+1)] nervlist += [((CLOSE_REPEAT_NUMBER+1)*CLOSE_REPEAT_TIMEOUT, self.could_not_close)] super().__init__(sm, nervlist) self.callbacks=[] @@ -219,26 +221,24 @@ class StateMachine(): return StateAboutToOpen(self.state_machine) class StateAboutToLeave(State): + def __init__(self, sm): + nervlist = [(LEAVE_TIMEOUT, lambda: StateLocking(self.state_machine))] + super().__init__(sm, nervlist) def handle_pins_event(self): if not self.pins().door_closed: return StateLeaving(self.state_machine) if self.pins().door_locked: return StateZu(self.state_machine) - def handle_wakeup_event(self): - over = time.time() - self.time_entered - if over >= LEAVE_TIMEOUT: - return StateLocking(self.state_machine) class StateLeaving(State): + def __init__(self, sm): + nervlist = [(LEAVE_TIMEOUT, lambda: StateAboutToOpen(self.state_machine))] + super().__init__(sm, nervlist) def handle_pins_event(self): if self.pins().door_closed: return StateLocking(self.state_machine) if self.pins().door_locked: return StateZu(self.state_machine) - def handle_wakeup_event(self): - over = time.time() - self.time_entered - if over >= LEAVE_TIMEOUT: - return StateAboutToOpen(self.state_machine) def __init__(self, actor): self.actor = actor -- 2.30.2