git » sdk » commit 312d290

Add typed event handlers

author Stephen Paul Weber
2024-03-04 20:13:31 UTC
committer Stephen Paul Weber
2024-03-04 20:13:31 UTC
parent 0d8f945e1e8acf9c450b93272949db93d37458f8

Add typed event handlers

snikket/Client.hx +54 -3
snikket/jingle/PeerConnection.cpp.hx +7 -1

diff --git a/snikket/Client.hx b/snikket/Client.hx
index 165bf94..764da42 100644
--- a/snikket/Client.hx
+++ b/snikket/Client.hx
@@ -9,6 +9,7 @@ import haxe.crypto.Base64;
 import haxe.io.Bytes;
 import haxe.io.BytesData;
 import snikket.jingle.IceServer;
+import snikket.jingle.PeerConnection;
 import snikket.Caps;
 import snikket.Chat;
 import snikket.ChatMessage;
@@ -446,9 +447,6 @@ class Client extends EventEmitter {
 		});
 	}
 
-	public function addChatMessageListener(handler:ChatMessage->Void):Void {
-		chatMessageHandlers.push(handler);
-	}
 
 	public function addPasswordNeededListener(handler:String->Void) {
 		this.on("auth/password-needed", (data) -> {
@@ -457,6 +455,59 @@ class Client extends EventEmitter {
 		});
 	}
 
+	public function addStatusOnlineListener(handler:()->Void):Void {
+		this.on("status/online", (data) -> {
+			handler();
+			return EventHandled;
+		});
+	}
+
+	public function addChatMessageListener(handler:ChatMessage->Void):Void {
+		chatMessageHandlers.push(handler);
+	}
+
+	public function addChatsUpdatedListener(handler:Array<Chat>->Void):Void {
+		this.on("chats/update", (data) -> {
+			handler(data);
+			return EventHandled;
+		});
+	}
+
+	public function addCallRingListener(handler:(Session,String)->Void):Void {
+		this.on("call/ring", (data) -> {
+			handler(data.session, data.chatId);
+			return EventHandled;
+		});
+	}
+
+	public function addCallRetractListener(handler:(String)->Void):Void {
+		this.on("call/retract", (data) -> {
+			handler(data.chatId);
+			return EventHandled;
+		});
+	}
+
+	public function addCallRingingListener(handler:(String)->Void):Void {
+		this.on("call/ringing", (data) -> {
+			handler(data.chatId);
+			return EventHandled;
+		});
+	}
+
+	public function addCallMediaListener(handler:(Session,Bool,Bool)->Void):Void {
+		this.on("call/media", (data) -> {
+			handler(data.session, data.audio, data.video);
+			return EventHandled;
+		});
+	}
+
+	public function addCallTrackListener(handler:(String,MediaStreamTrack,Array<MediaStream>)->Void):Void {
+		this.on("call/track", (data) -> {
+			handler(data.chatId, data.track, data.streams);
+			return EventHandled;
+		});
+	}
+
 	private function onConnected(data) { // Fired on connect or reconnect
 		if (data != null && data.jid != null) {
 			jid = JID.parse(data.jid);
diff --git a/snikket/jingle/PeerConnection.cpp.hx b/snikket/jingle/PeerConnection.cpp.hx
index c4c7267..58c7ef0 100644
--- a/snikket/jingle/PeerConnection.cpp.hx
+++ b/snikket/jingle/PeerConnection.cpp.hx
@@ -1,13 +1,19 @@
 package snikket.jingle;
 
 typedef TODO = Dynamic;
-typedef MediaStreamTrack = TODO;
 typedef DTMFSender = TODO;
 typedef Transceiver = {
 	 receiver: Null<{ track: MediaStreamTrack }>,
 	 sender: Null<{ track: MediaStreamTrack, dtmf: DTMFSender }>
 }
 
+class MediaStreamTrack {
+	 public var muted: Bool;
+	 public var kind: String;
+
+	 public function stop() { }
+}
+
 class MediaStream {
 	 public function getTracks() {
 		  return [];