Example #1
0
    def s1(self):
        """
        State s1
        """
        machine = self.__machine_name
        state_name = "s1"
        if self.tEvt['sType'] == "init":
            return 0
        elif self.tEvt['sType'] == "entry":
            printf("%s %s %s", machine, state_name, "ENTRY")
            self.sendUpdate(state_name, "ENTRY")

            # GW - The following 2 lines have been added
            self.s1Thread = DoThread(self.__s1Do)
            self.s1Thread.start()

            self.__s1Entry()
            return 0
        elif self.tEvt['sType'] == "exit":
            printf("%s %s %s", machine, state_name, "EXIT")
            self.sendUpdate(state_name, "EXIT")

            # GW - The following 1 line has been added
            self.s1Thread.terminate()

            self.__s1Exit()
            return 0
        elif self.tEvt['sType'] == "Ev1":
            printf("%s %s", state_name, self.tEvt['sType'])
            self.stateTran(self.s2)
            return 0
        return self.tEvt['sType']
Example #2
0
    def s1(self):
        """
        State s1
        """
        machine = self.__machine_name
        state_name = "s1"
        if self.tEvt['sType'] == "init":
            return 0
        elif self.tEvt['sType'] == "entry":
            printf("%s %s %s", machine, state_name, "ENTRY")
            self.sendUpdate(state_name,"ENTRY")
            
            # GW - The following 2 lines have been added
            self.s1Thread = DoThread(self.__s1Do)
            self.s1Thread.start()
            
            self.__s1Entry()
            return 0
        elif self.tEvt['sType'] == "exit":
            printf("%s %s %s", machine, state_name, "EXIT")
            self.sendUpdate(state_name,"EXIT")
            
            # GW - The following 1 line has been added
            self.s1Thread.terminate()

            self.__s1Exit()
            return 0
        elif self.tEvt['sType'] == "Ev1":
            printf("%s %s", state_name, self.tEvt['sType'])
            self.stateTran(self.s2)
            return 0
        return self.tEvt['sType']
Example #3
0
class DoExActive(active.Active):
    """
    DoEx state machine active object.
    """
    def __init__(self, impl_object=None, window_name="doex"):
        """
        Constructor
        """
        active.Active.__init__(self)
        # --------------------------------------------------------------------
        #               name                            parent's
        #                of          event              event
        #               state        handler            handler
        # --------------------------------------------------------------------
        self.addState ( "top",       self.top,          None )
        self.addState ( "s1",        self.s1,           self.top)
        self.addState ( "s2",        self.s2,           self.top)

        # For GUI messages
        self.__machine_name = "DoEx"
        self.__window_name = window_name
        # For manually coded implementation
        # of all actions, guards, etc.
        self.__impl_obj = impl_object


    def initialize(self):
        """
        Override active object initialize with
        custom initialize routine.  Mostly used
        to subscribe signals for state machine.
        """
        # Subscribe to signals here.
        self._subscribe("Ev1")

        # Timer event objects created here.
        pass


    def sendUpdate(self, state_name, entry_exit):
        """
        Send gui entry or exit messages.
        """
        str = "%s %s%s %s" % (self.__window_name, self.__machine_name, state_name, entry_exit)
        #print str
        self._sendUpdate(str)


    def top(self):
        """
        The routine handles initial events and events that get bubbled 
        to the top of the state-machine.  Events that get bubbled to the top can
        either be ignored (return 0) or an error message can be generated.
        """
        if self.tEvt['sType'] == "init":
            self.stateStart(self.s1)
            return 0
        else:
            return 0


    def __s1Entry(self):
        """
        Implementation method for s1Entry()
        """
        if self.__impl_obj != None:
            impl_obj = self.__impl_obj
            if "s1Entry" in dir(self.__impl_obj):
                # Execute self.__impl_obj.s1Entry() here.
                e = "impl_obj." + "s1Entry()"
                eval(e, {}, locals() )
            else:
                printf("Warning: s1Entry() is not implemented!")
        else:
            printf("Warning: no implementation object for s1Entry()")


    def __s1Do(self):
        """
        Implementation method for s1Do()
        """
        if self.__impl_obj != None:
            impl_obj = self.__impl_obj
            if "s1Do" in dir(self.__impl_obj):
                # Execute self.__impl_obj.s1Do() here.
                e = "impl_obj." + "s1Do()"
                eval(e, {}, locals() )
            else:
                printf("Warning: s1Do() is not implemented!")
        else:
            printf("Warning: no implementation object for s1Do()")


    def __s1Exit(self):
        """
        Implementation method for s1Exit()
        """
        if self.__impl_obj != None:
            impl_obj = self.__impl_obj
            if "s1Exit" in dir(self.__impl_obj):
                # Execute self.__impl_obj.s1Exit() here.
                e = "impl_obj." + "s1Exit()"
                eval(e, {}, locals() )
            else:
                printf("Warning: s1Exit() is not implemented!")
        else:
            printf("Warning: no implementation object for s1Exit()")


    def s1(self):
        """
        State s1
        """
        machine = self.__machine_name
        state_name = "s1"
        if self.tEvt['sType'] == "init":
            return 0
        elif self.tEvt['sType'] == "entry":
            printf("%s %s %s", machine, state_name, "ENTRY")
            self.sendUpdate(state_name,"ENTRY")
            
            # GW - The following 2 lines have been added
            self.s1Thread = DoThread(self.__s1Do)
            self.s1Thread.start()
            
            self.__s1Entry()
            return 0
        elif self.tEvt['sType'] == "exit":
            printf("%s %s %s", machine, state_name, "EXIT")
            self.sendUpdate(state_name,"EXIT")
            
            # GW - The following 1 line has been added
            self.s1Thread.terminate()

            self.__s1Exit()
            return 0
        elif self.tEvt['sType'] == "Ev1":
            printf("%s %s", state_name, self.tEvt['sType'])
            self.stateTran(self.s2)
            return 0
        return self.tEvt['sType']


    def s2(self):
        """
        State s2
        """
        machine = self.__machine_name
        state_name = "s2"
        if self.tEvt['sType'] == "init":
            return 0
        elif self.tEvt['sType'] == "entry":
            printf("%s %s %s", machine, state_name, "ENTRY")
            self.sendUpdate(state_name,"ENTRY")
            return 0
        elif self.tEvt['sType'] == "exit":
            printf("%s %s %s", machine, state_name, "EXIT")
            self.sendUpdate(state_name,"EXIT")
            return 0
        elif self.tEvt['sType'] == "Ev1":
            printf("%s %s", state_name, self.tEvt['sType'])
            self.stateTran(self.s1)
            return 0
        return self.tEvt['sType']
Example #4
0
class DoExActive(active.Active):
    """
    DoEx state machine active object.
    """
    def __init__(self, impl_object=None, window_name="doex"):
        """
        Constructor
        """
        active.Active.__init__(self)
        # --------------------------------------------------------------------
        #               name                            parent's
        #                of          event              event
        #               state        handler            handler
        # --------------------------------------------------------------------
        self.addState("top", self.top, None)
        self.addState("s1", self.s1, self.top)
        self.addState("s2", self.s2, self.top)

        # For GUI messages
        self.__machine_name = "DoEx"
        self.__window_name = window_name
        # For manually coded implementation
        # of all actions, guards, etc.
        self.__impl_obj = impl_object

    def initialize(self):
        """
        Override active object initialize with
        custom initialize routine.  Mostly used
        to subscribe signals for state machine.
        """
        # Subscribe to signals here.
        self._subscribe("Ev1")

        # Timer event objects created here.
        pass

    def sendUpdate(self, state_name, entry_exit):
        """
        Send gui entry or exit messages.
        """
        str = "%s %s%s %s" % (self.__window_name, self.__machine_name,
                              state_name, entry_exit)
        #print str
        self._sendUpdate(str)

    def top(self):
        """
        The routine handles initial events and events that get bubbled 
        to the top of the state-machine.  Events that get bubbled to the top can
        either be ignored (return 0) or an error message can be generated.
        """
        if self.tEvt['sType'] == "init":
            self.stateStart(self.s1)
            return 0
        else:
            return 0

    def __s1Entry(self):
        """
        Implementation method for s1Entry()
        """
        if self.__impl_obj != None:
            impl_obj = self.__impl_obj
            if "s1Entry" in dir(self.__impl_obj):
                # Execute self.__impl_obj.s1Entry() here.
                e = "impl_obj." + "s1Entry()"
                eval(e, {}, locals())
            else:
                printf("Warning: s1Entry() is not implemented!")
        else:
            printf("Warning: no implementation object for s1Entry()")

    def __s1Do(self):
        """
        Implementation method for s1Do()
        """
        if self.__impl_obj != None:
            impl_obj = self.__impl_obj
            if "s1Do" in dir(self.__impl_obj):
                # Execute self.__impl_obj.s1Do() here.
                e = "impl_obj." + "s1Do()"
                eval(e, {}, locals())
            else:
                printf("Warning: s1Do() is not implemented!")
        else:
            printf("Warning: no implementation object for s1Do()")

    def __s1Exit(self):
        """
        Implementation method for s1Exit()
        """
        if self.__impl_obj != None:
            impl_obj = self.__impl_obj
            if "s1Exit" in dir(self.__impl_obj):
                # Execute self.__impl_obj.s1Exit() here.
                e = "impl_obj." + "s1Exit()"
                eval(e, {}, locals())
            else:
                printf("Warning: s1Exit() is not implemented!")
        else:
            printf("Warning: no implementation object for s1Exit()")

    def s1(self):
        """
        State s1
        """
        machine = self.__machine_name
        state_name = "s1"
        if self.tEvt['sType'] == "init":
            return 0
        elif self.tEvt['sType'] == "entry":
            printf("%s %s %s", machine, state_name, "ENTRY")
            self.sendUpdate(state_name, "ENTRY")

            # GW - The following 2 lines have been added
            self.s1Thread = DoThread(self.__s1Do)
            self.s1Thread.start()

            self.__s1Entry()
            return 0
        elif self.tEvt['sType'] == "exit":
            printf("%s %s %s", machine, state_name, "EXIT")
            self.sendUpdate(state_name, "EXIT")

            # GW - The following 1 line has been added
            self.s1Thread.terminate()

            self.__s1Exit()
            return 0
        elif self.tEvt['sType'] == "Ev1":
            printf("%s %s", state_name, self.tEvt['sType'])
            self.stateTran(self.s2)
            return 0
        return self.tEvt['sType']

    def s2(self):
        """
        State s2
        """
        machine = self.__machine_name
        state_name = "s2"
        if self.tEvt['sType'] == "init":
            return 0
        elif self.tEvt['sType'] == "entry":
            printf("%s %s %s", machine, state_name, "ENTRY")
            self.sendUpdate(state_name, "ENTRY")
            return 0
        elif self.tEvt['sType'] == "exit":
            printf("%s %s %s", machine, state_name, "EXIT")
            self.sendUpdate(state_name, "EXIT")
            return 0
        elif self.tEvt['sType'] == "Ev1":
            printf("%s %s", state_name, self.tEvt['sType'])
            self.stateTran(self.s1)
            return 0
        return self.tEvt['sType']