Messaging.gd 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. extends Node
  2. const endpoints = {}
  3. const subscriber = {}
  4. static func subscribe(event_key : String, listener : Node, callback : String)->void:
  5. if endpoints.has(event_key):
  6. for publisher in endpoints[event_key]:
  7. publisher["pub"].connect(publisher["sig"], listener, callback)
  8. print("subsribing to ", event_key)
  9. if not subscriber.has(event_key):
  10. subscriber[event_key] = []
  11. subscriber[event_key].append({"lis": listener, "cb": callback})
  12. static func publish(event_key : String, payload):
  13. if endpoints.has(event_key):
  14. endpoints[event_key][0]["pub"].emit_signal(endpoints[event_key][0]["sig"], payload)
  15. else:
  16. print("no publisher to emit ", event_key, " with ", payload)
  17. static func registerPublisher(event_key : String, publisher : Node, Signal : String)->void:
  18. if not endpoints.has(event_key):
  19. endpoints[event_key] = []
  20. endpoints[event_key].append({"pub": publisher, "sig": Signal})
  21. if subscriber.has(event_key):
  22. for sub in subscriber[event_key]:
  23. publisher.connect(Signal, sub["lis"], sub["cb"])
  24. print("added publisher for ", event_key, ":", endpoints[event_key])
  25. static func clear()->void:
  26. """
  27. Clears all Publishers
  28. """
  29. endpoints.clear()
  30. subscriber.clear()