0

I am trying to write a class that could allow users to setup a event list, each event will point to a specific function. User could use a selector to run a function by its marco. Below code could work, but i think it's not good. Is there any better way to do it?


class EventDispatcher(object):
    def __init__(self):
        self.running = False
        self.selector = None
        self.key = []
        self.handler = []

        self.thread_monitor = None

    def AddEvent(self, key, *args, **kwargs):
        self.key.append(key)
        self.handler.append(*args, **kwargs)

    def DispatchSingleEvent(self):
        while(self.running):
            if self.selector != None:
                self.handler[self.key.index(self.selector)]()
                self.selector = None

    def ClearAllEvent(self):
        self.key.clear()
        self.handler.clear()

    def IsMacroRunning(self):
        return self.running

    def Execute(self, event):
        self.selector = event

    def StartMarco(self):
        self.running = True
        self.thread_monitor = threading.Thread(target = self.DispatchSingleEvent)
        self.thread_monitor.start()

    def StopMacro(self):
        self.running = False

Paul Chang
  • 13
  • 2

1 Answers1

0

I would recommend not to re-invent bicycle, but to use already implemented event handler instead. There is list of open source event managers available here.

For you I would recommend to start with event-notifier first.

mandeeppp
  • 19
  • 1