mirror of
https://github.com/nextcloud/talk-android
synced 2025-03-11 18:10:44 +00:00
Split message receiver for internal and external signaling servers
Note that the thread used to handle and notify messages from the external signaling server does not change; the EventBus subscriber mode was "BACKGROUND", but as the message was posted from a WebSocket handler, which runs in a worker thread rather than in the main thread, the subscriber was executed in the same thread as the poster. Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
parent
9df56dccda
commit
c8e77c3d3b
@ -264,7 +264,8 @@ public class CallActivity extends CallBaseActivity {
|
||||
|
||||
private SpotlightView spotlightView;
|
||||
|
||||
private CallActivitySignalingMessageReceiver signalingMessageReceiver = new CallActivitySignalingMessageReceiver();
|
||||
private InternalSignalingMessageReceiver internalSignalingMessageReceiver = new InternalSignalingMessageReceiver();
|
||||
private SignalingMessageReceiver signalingMessageReceiver;
|
||||
|
||||
private Map<String, SignalingMessageReceiver.CallParticipantMessageListener> callParticipantMessageListeners =
|
||||
new HashMap<>();
|
||||
@ -532,8 +533,6 @@ public class CallActivity extends CallBaseActivity {
|
||||
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("internalSctpDataChannels", "true"));
|
||||
sdpConstraints.optional.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
|
||||
|
||||
signalingMessageReceiver.addListener(offerMessageListener);
|
||||
|
||||
if (!isVoiceOnlyCall) {
|
||||
cameraInitialization();
|
||||
}
|
||||
@ -1350,6 +1349,8 @@ public class CallActivity extends CallBaseActivity {
|
||||
if (hasExternalSignalingServer) {
|
||||
setupAndInitiateWebSocketsConnection();
|
||||
} else {
|
||||
signalingMessageReceiver = internalSignalingMessageReceiver;
|
||||
signalingMessageReceiver.addListener(offerMessageListener);
|
||||
joinRoomAndCall();
|
||||
}
|
||||
}
|
||||
@ -1548,6 +1549,10 @@ public class CallActivity extends CallBaseActivity {
|
||||
externalSignalingServer.getExternalSignalingServer(),
|
||||
conversationUser, externalSignalingServer.getExternalSignalingTicket(),
|
||||
TextUtils.isEmpty(credentials));
|
||||
// Although setupAndInitiateWebSocketsConnection could be called several times the web socket is
|
||||
// initialized just once, so the message receiver is also initialized just once.
|
||||
signalingMessageReceiver = webSocketClient.getSignalingMessageReceiver();
|
||||
signalingMessageReceiver.addListener(offerMessageListener);
|
||||
} else {
|
||||
if (webSocketClient.isConnected() && currentCallStatus == CallStatus.PUBLISHER_FAILED) {
|
||||
webSocketClient.restartWebSocket();
|
||||
@ -1622,11 +1627,6 @@ public class CallActivity extends CallBaseActivity {
|
||||
|
||||
}
|
||||
break;
|
||||
case "signalingMessage":
|
||||
Log.d(TAG, "onMessageEvent 'signalingMessage'");
|
||||
signalingMessageReceiver.process((NCSignalingMessage) webSocketClient.getJobWithId(
|
||||
Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
|
||||
break;
|
||||
case "peerReadyForRequestingOffer":
|
||||
Log.d(TAG, "onMessageEvent 'peerReadyForRequestingOffer'");
|
||||
webSocketClient.requestOfferForSessionIdWithType(
|
||||
@ -1670,7 +1670,7 @@ public class CallActivity extends CallBaseActivity {
|
||||
} else if ("message".equals(messageType)) {
|
||||
NCSignalingMessage ncSignalingMessage = LoganSquare.parse(signaling.getMessageWrapper().toString(),
|
||||
NCSignalingMessage.class);
|
||||
signalingMessageReceiver.process(ncSignalingMessage);
|
||||
internalSignalingMessageReceiver.process(ncSignalingMessage);
|
||||
} else {
|
||||
Log.e(TAG, "unexpected message type when receiving signaling message");
|
||||
}
|
||||
@ -2636,8 +2636,10 @@ public class CallActivity extends CallBaseActivity {
|
||||
|
||||
/**
|
||||
* Temporary implementation of SignalingMessageReceiver until signaling related code is extracted from CallActivity.
|
||||
*
|
||||
* All listeners are called in the main thread.
|
||||
*/
|
||||
private static class CallActivitySignalingMessageReceiver extends SignalingMessageReceiver {
|
||||
private static class InternalSignalingMessageReceiver extends SignalingMessageReceiver {
|
||||
public void process(NCSignalingMessage message) {
|
||||
processSignalingMessage(message);
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ import com.nextcloud.talk.models.json.websocket.ErrorOverallWebSocketMessage;
|
||||
import com.nextcloud.talk.models.json.websocket.EventOverallWebSocketMessage;
|
||||
import com.nextcloud.talk.models.json.websocket.HelloResponseOverallWebSocketMessage;
|
||||
import com.nextcloud.talk.models.json.websocket.JoinedRoomOverallWebSocketMessage;
|
||||
import com.nextcloud.talk.signaling.SignalingMessageReceiver;
|
||||
import com.nextcloud.talk.utils.MagicMap;
|
||||
import com.nextcloud.talk.utils.bundle.BundleKeys;
|
||||
|
||||
@ -109,6 +110,8 @@ public class MagicWebSocketInstance extends WebSocketListener {
|
||||
|
||||
private List<String> messagesQueue = new ArrayList<>();
|
||||
|
||||
private final ExternalSignalingMessageReceiver signalingMessageReceiver = new ExternalSignalingMessageReceiver();
|
||||
|
||||
MagicWebSocketInstance(User conversationUser, String connectionUrl, String webSocketTicket) {
|
||||
NextcloudTalkApplication.Companion.getSharedApplication().getComponentApplication().inject(this);
|
||||
|
||||
@ -326,11 +329,7 @@ public class MagicWebSocketInstance extends WebSocketListener {
|
||||
ncSignalingMessage.setFrom(callOverallWebSocketMessage.getCallWebSocketMessage().getSenderWebSocketMessage().getSessionId());
|
||||
}
|
||||
|
||||
if (!TextUtils.isEmpty(ncSignalingMessage.getFrom())) {
|
||||
HashMap<String, String> messageHashMap = new HashMap<>();
|
||||
messageHashMap.put(JOB_ID, Integer.toString(magicMap.add(ncSignalingMessage)));
|
||||
eventBus.post(new WebSocketCommunicationEvent("signalingMessage", messageHashMap));
|
||||
}
|
||||
signalingMessageReceiver.process(ncSignalingMessage);
|
||||
break;
|
||||
case "bye":
|
||||
connected = false;
|
||||
@ -471,4 +470,21 @@ public class MagicWebSocketInstance extends WebSocketListener {
|
||||
restartWebSocket();
|
||||
}
|
||||
}
|
||||
|
||||
public SignalingMessageReceiver getSignalingMessageReceiver() {
|
||||
return signalingMessageReceiver;
|
||||
}
|
||||
|
||||
/**
|
||||
* Temporary implementation of SignalingMessageReceiver until signaling related code is extracted to a Signaling
|
||||
* class.
|
||||
*
|
||||
* All listeners are called in the WebSocket reader thread. This thread should be the same as long as the
|
||||
* WebSocket stays connected, but it may change whenever it is connected again.
|
||||
*/
|
||||
private static class ExternalSignalingMessageReceiver extends SignalingMessageReceiver {
|
||||
public void process(NCSignalingMessage message) {
|
||||
processSignalingMessage(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user