Exemplo n.º 1
0
    def __init__(self, services, eventListeners, stateHandlers, enabledLibs,
                 commonArgs):
        print "Init'ing Pyfsm"
        # init internals
        self.services = []
        self.eventListeners = []
        self.stateHandlers = {}
        self.enabledLibs = {}
        self.commonArgs = commonArgs  # passed to EVERY state handler
        # add defaults
        self.jobProcessorService = Service.JobProcessorService(3)
        self.services.extend([self.jobProcessorService])
        self.eventListeners.extend([EventListener.InitEventListener()])
        # add user defined
        self.services.extend(services)
        self.eventListeners.extend(eventListeners)
        for stateHandler in stateHandlers:
            self.stateHandlers[stateHandler.name()] = stateHandler

        # prepare enabled libs for state handler injection
        for class_instance in enabledLibs:
            # add dict entries <class-name> -> <class-instance>
            self.enabledLibs[type(class_instance).__name__] = class_instance

        # TODO: figure out how to init this properly, given the new format

        # init current state
        if "INIT" in self.stateHandlers:
            self.currentStateHandler = self.stateHandlers["INIT"]
        else:
            raise PyfsmException.InitializationError(
                "No InitState defined in the stateHandlers dictionary.")

        # instantiate the event queue
        self.eventQueue = PriorityQueue()  # thread-safe queue

        # startup all event listeners and services
        for eventListener in self.eventListeners:
            eventListener._set_event_queue(self.eventQueue)
            eventListener.start()
        for service in self.services:
            service._set_event_queue(self.eventQueue)
            service.start()