git » sdk » commit e30e052

Handler for global live chat messages

author Stephen Paul Weber
2023-07-26 19:49:16 UTC
committer Stephen Paul Weber
2023-07-26 19:49:16 UTC
parent adcecef35d8d711aaab8c62713994c867471e424

Handler for global live chat messages

In a full client we often want this so we can show notifications/unread
counts for converations that aren't open, etc.

xmpp/Client.hx +18 -0

diff --git a/xmpp/Client.hx b/xmpp/Client.hx
index 5ff5517..ce38ac5 100644
--- a/xmpp/Client.hx
+++ b/xmpp/Client.hx
@@ -9,6 +9,7 @@ typedef ChatList = Array<Chat>;
 
 class Client extends xmpp.EventEmitter {
 	private var stream:GenericStream;
+	private var chatMessageHandlers: Array<(ChatMessage)->Void> = [];
 	public var jid(default,null):String;
 
 	public function new(jid: String) {
@@ -23,7 +24,24 @@ class Client extends xmpp.EventEmitter {
 		stream.connect(jid);
 	}
 
+	public function addChatMessageListener(handler:ChatMessage->Void):Void {
+		chatMessageHandlers.push(handler);
+	}
+
 	private function onConnected(data) {
+		this.stream.on("message", function(event) {
+			final stanza:Stanza = event.stanza;
+			final chatMessage = ChatMessage.fromStanza(stanza, jid);
+			if (chatMessage != null) {
+				for (handler in chatMessageHandlers) {
+					handler(chatMessage);
+				}
+			}
+
+			return EventUnhandled; // Allow others to get this event as well
+		});
+
+		stream.sendStanza(new Stanza("presence")); // Set self to online
 		return this.trigger("status/online", {});
 	}