Skip to content

Instantly share code, notes, and snippets.

@SeanOMik
Last active May 29, 2020 19:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SeanOMik/9934b22981e7201b201193c9a70b33f5 to your computer and use it in GitHub Desktop.
Save SeanOMik/9934b22981e7201b201193c9a70b33f5 to your computer and use it in GitHub Desktop.
import tables, hashes, json
type
BaseEvent* = object of RootObj
name*: string
ReadyEvent* = object of BaseEvent
readyPayload*: JsonNode
proc hash[T: object](o: T): Hash =
for k, v in o.fieldPairs:
result = result !& v.hash
result = !$result
# Table storing all the event listeners
let eventListeners = newTable[BaseEvent, seq[proc(event: BaseEvent)]]()
proc registerEventListener*[T: BaseEvent](event: T, listener: proc(event: T)) =
when (eventListeners.hasKey(event)):
var listeners = eventListeners[event]
listeners.add(listener)
else:
let tmp = @[listener]
eventListeners.add(event, tmp)
proc dispatchEvent*[T: BaseEvent](event: T) =
if (eventListeners.hasKey(event)):
let listeners = eventListeners[event]
for index, eventListener in listeners.pairs:
echo "Dispatching event: ", BaseEvent(event).name
eventListener(event)
else:
echo "No event listeners for event: ", BaseEvent(event).name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment