示例#1
0
async def main():
    import signal
    Spy.enable_spy(SimpleSpy)
    s1 = HsmTest()
    SimpleSpy.on_framework_add(s1)
    interactive = False
    if interactive:
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        s1.init()
        while not s1.terminated:
            sig_name = input('\tEvent --> ')
            try:
                sig = getattr(Signal, sig_name)
            except LookupError:
                print("\nInvalid signal name", end="")
                continue
            event = Event(sig, None)
            s1.dispatch(event)

        print("\nTerminated")
    else:
        seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a', 't']
        # seq = ['g', 'i', 'a', 'd', 'd', 'c', 'e', 'e', 'g', 'i', 'i', 't']
        s1.start(0)
        for sig in seq:
            event = Event(getattr(Signal, sig), None)
            s1.postFIFO(event)
        await Framework.done()
 def _error(self, event):
     sig = event.signal
     if sig == Signal.ENTRY:
         print(f"{self.name} in error state")
         self.postFIFO(Event(Signal.TERMINATE, None))
         return self.handled(event)
     return self.super(self._running)
async def main():
    hsm = HsmExample1()
    # Spy.enable_spy(SimpleSpy)
    # SimpleSpy.on_framework_add(hsm)
    hsm.start(0)
    while not hsm.terminated:
        sig_name = input('\tEvent --> ')
        try:
            sig = getattr(Signal, sig_name)
        except LookupError:
            print("\nInvalid signal name", end="")
            continue
        event = Event(sig, None)
        hsm.dispatch(event)
    await Framework.done()
示例#4
0
 async def my_middleware(self, request, handler):
     try:
         resp = await handler(request)
     except Exception as e:
         if self.publish_errors:
             Framework.publish(
                 Event(
                     Signal.ERROR, {
                         "exc": e,
                         "traceback": traceback.format_exc(),
                         "location": self.__class__.__name__,
                         "request": request.url
                     }))
         raise HTTPInternalServerError(
             text=
             f"Error handling request {request.path_qs}\n{traceback.format_exc()}"
         )
     return resp
async def main():
    hsm = HsmExample1()
    # Spy.enable_spy(SimpleSpy)
    # SimpleSpy.on_framework_add(hsm)
    seq = ['E1', 'E2', 'E1', 'E2']
    hsm.start(0)

    for sig_name in seq:
        sig = getattr(Signal, sig_name)
        print(f'\tEvent --> {sig_name}')
        Framework.publish(Event(sig, None))
        # Allow other tasks to run
        await asyncio.sleep(0)

    # Wait for CTRL-C to signal TERMINATE to all the HSMs. If we want to
    # automatically terminate them, we can publish the TERMINATE event, but
    # it is then necessary include Framework.subscribe("TERMINATE") in
    # _initial above
     
    # Framework.publish(Event.TERMINATE)
    await Framework.done()
示例#6
0
    def _running(self, event):
        sig = event.signal
        if sig == Signal.ENTRY:
            print(f"{self.name} enters running state, period {self.period}")
            self.te.postEvery(self, self.period)
            # raise ValueError("Exception in entry handler for _running")
            return self.handled(event)

        elif sig == getattr(Signal, f"TIMER_{self.name}"):
            self.count += 1
            print(f"{self.name} receives tick")
            self.postFIFO(
                Event(Signal.NOTIFY,
                      f"{self.__class__.__name__}: {self.name}"))
            # raise ValueError("Error raised in notify")
            return self.handled(event)

        elif sig == Signal.NOTIFY:
            print(f"Received Signal.NOTIFY with payload {event.value}")
            self.run_async(self.async_task_example(self.name))
            return self.handled(event)

        elif sig == Signal.TERMINATE:
            print("Received TERMINATE")
            return self.tran(self._exit)

        elif sig == Signal.EXIT:
            self.te.disarm()
            return self.handled(event)

        elif sig == Signal.ERROR:
            print(f"ERROR: {event.value}")
            return self.handled(event)
            # if self.name == "alpha":
            #     return self.tran(self._running)
            # else:
            #     return self.tran(self._error)

        return self.super(self.top)
示例#7
0
async def main():
    hsm = HsmExample1()
    # Spy.enable_spy(SimpleSpy)
    # SimpleSpy.on_framework_add(hsm)
    seq = ['E1', 'E2', 'E1', 'E2']
    hsm.start(0)
    while not hsm.terminated:
        if seq:
            sig_name = seq.pop(0)
            print(f'\tEvent --> {sig_name}')
        else:
            sig_name = input('\tEvent --> ')
        try:
            sig = getattr(Signal, sig_name)
            hsm.postFIFO(Event(sig, None))
        except LookupError:
            print("\nInvalid signal name", end="")
            continue
        while hsm.has_msgs():
            event = hsm.pop_msg()
            hsm.dispatch(event)
    print("\nTerminated")
    await Framework.done()