Added event system functionality

This commit is contained in:
itdominator 2023-01-22 19:52:53 -06:00
parent 9db3dea48a
commit 126e5b5ca2
1 changed files with 18 additions and 0 deletions

View File

@ -18,6 +18,12 @@ class EventSystem:
def subscribe(self, event_type, fn):
self.subscribers[event_type].append(fn)
def unsubscribe(self, event_type, fn):
self.subscribers[event_type].remove(fn)
def unsubscribe_all(self, event_type):
self.subscribers.pop(event_type, None)
def emit(self, event_type, data = None):
if event_type in self.subscribers:
for fn in self.subscribers[event_type]:
@ -28,3 +34,15 @@ class EventSystem:
fn(data)
else:
fn()
def emit_and_await(self, event_type, data = None):
""" NOTE: Should be used when signal has only one listener and vis-a-vis """
if event_type in self.subscribers:
for fn in self.subscribers[event_type]:
if data:
if hasattr(data, '__iter__') and not type(data) is str:
return fn(*data)
else:
return fn(data)
else:
return fn()