mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-19 19:49:33 +01:00
Add support for sending data channel messages to a single participant
This is not possible when Janus is used, as Janus only allows broadcasting data channel messages to all the subscribers of the publisher connection. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
fe32bc1628
commit
ea4bccdaf7
@ -13,6 +13,9 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* Helper class to send messages to participants in a call when an MCU is used.
|
||||
* <p>
|
||||
* 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 {
|
||||
|
||||
|
@ -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())){
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user