diff --git a/app/src/main/java/com/nextcloud/talk/call/MessageSenderMcu.java b/app/src/main/java/com/nextcloud/talk/call/MessageSenderMcu.java index 803becf57..f3278fe4c 100644 --- a/app/src/main/java/com/nextcloud/talk/call/MessageSenderMcu.java +++ b/app/src/main/java/com/nextcloud/talk/call/MessageSenderMcu.java @@ -13,6 +13,9 @@ import java.util.List; /** * Helper class to send messages to participants in a call when an MCU is used. + *
+ * Note that when Janus is used it is not possible to send a data channel message to a specific participant. Any data + * channel message will be broadcast to all the subscribers of the publisher peer connection (the own peer connection). */ public class MessageSenderMcu extends MessageSender { diff --git a/app/src/main/java/com/nextcloud/talk/call/MessageSenderNoMcu.java b/app/src/main/java/com/nextcloud/talk/call/MessageSenderNoMcu.java index 6f4306262..b5b903503 100644 --- a/app/src/main/java/com/nextcloud/talk/call/MessageSenderNoMcu.java +++ b/app/src/main/java/com/nextcloud/talk/call/MessageSenderNoMcu.java @@ -20,6 +20,19 @@ public class MessageSenderNoMcu extends MessageSender { super(peerConnectionWrappers); } + /** + * Sends the given data channel message to the given signaling session ID. + * + * @param dataChannelMessage the message to send + * @param sessionId the signaling session ID of the participant to send the message to + */ + public void send(DataChannelMessage dataChannelMessage, String sessionId) { + PeerConnectionWrapper peerConnectionWrapper = getPeerConnectionWrapper(sessionId); + if (peerConnectionWrapper != null) { + peerConnectionWrapper.send(dataChannelMessage); + } + } + public void sendToAll(DataChannelMessage dataChannelMessage) { for (PeerConnectionWrapper peerConnectionWrapper: peerConnectionWrappers) { if ("video".equals(peerConnectionWrapper.getVideoStreamType())){ diff --git a/app/src/test/java/com/nextcloud/talk/call/MessageSenderNoMcuTest.kt b/app/src/test/java/com/nextcloud/talk/call/MessageSenderNoMcuTest.kt index cfd4a850d..6784bcef3 100644 --- a/app/src/test/java/com/nextcloud/talk/call/MessageSenderNoMcuTest.kt +++ b/app/src/test/java/com/nextcloud/talk/call/MessageSenderNoMcuTest.kt @@ -50,6 +50,39 @@ class MessageSenderNoMcuTest { messageSender = MessageSenderNoMcu(peerConnectionWrappers) } + @Test + fun testSendDataChannelMessage() { + val message = DataChannelMessage() + messageSender!!.send(message, "theSessionId2") + + Mockito.verify(peerConnectionWrapper2!!).send(message) + Mockito.verify(peerConnectionWrapper1!!, never()).send(message) + Mockito.verify(peerConnectionWrapper2Screen!!, never()).send(message) + Mockito.verify(peerConnectionWrapper4Screen!!, never()).send(message) + } + + @Test + fun testSendDataChannelMessageIfScreenPeerConnection() { + val message = DataChannelMessage() + messageSender!!.send(message, "theSessionId4") + + Mockito.verify(peerConnectionWrapper1!!, never()).send(message) + Mockito.verify(peerConnectionWrapper2!!, never()).send(message) + Mockito.verify(peerConnectionWrapper2Screen!!, never()).send(message) + Mockito.verify(peerConnectionWrapper4Screen!!, never()).send(message) + } + + @Test + fun testSendDataChannelMessageIfNoPeerConnection() { + val message = DataChannelMessage() + messageSender!!.send(message, "theSessionId3") + + Mockito.verify(peerConnectionWrapper1!!, never()).send(message) + Mockito.verify(peerConnectionWrapper2!!, never()).send(message) + Mockito.verify(peerConnectionWrapper2Screen!!, never()).send(message) + Mockito.verify(peerConnectionWrapper4Screen!!, never()).send(message) + } + @Test fun testSendDataChannelMessageToAll() { val message = DataChannelMessage()