mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-13 15:54:59 +01:00
Smaller progress for websocket communication
This commit is contained in:
parent
568db40816
commit
9f1fef7ff1
@ -1193,11 +1193,13 @@ public class CallController extends BaseController {
|
|||||||
if (webSocketCommunicationEvent.getType().equals("hello")) {
|
if (webSocketCommunicationEvent.getType().equals("hello")) {
|
||||||
callSession = webSocketClient.getSessionId();
|
callSession = webSocketClient.getSessionId();
|
||||||
webSocketClient.joinRoomWithRoomToken(roomToken);
|
webSocketClient.joinRoomWithRoomToken(roomToken);
|
||||||
alwaysGetPeerConnectionWrapperForSessionId(callSession);
|
alwaysGetPeerConnectionWrapperForSessionId(callSession, true);
|
||||||
} else if (webSocketCommunicationEvent.equals("participantsUpdate")) {
|
} else if ("participantsUpdate".equals(webSocketCommunicationEvent.getType())) {
|
||||||
if (webSocketCommunicationEvent.getHashMap().get("roomId").equals(roomToken)) {
|
if (webSocketCommunicationEvent.getHashMap().get("roomId").equals(roomToken)) {
|
||||||
processUsersInRoom((List<HashMap<String, Object>>) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
|
processUsersInRoom((List<HashMap<String, Object>>) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
|
||||||
}
|
}
|
||||||
|
} else if ("signalingMessage".equals(webSocketCommunicationEvent.getType())) {
|
||||||
|
processMessage((NCSignalingMessage) webSocketClient.getJobWithId(Integer.valueOf(webSocketCommunicationEvent.getHashMap().get("jobId"))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1235,51 +1237,55 @@ public class CallController extends BaseController {
|
|||||||
} else if ("message".equals(messageType)) {
|
} else if ("message".equals(messageType)) {
|
||||||
NCSignalingMessage ncSignalingMessage = LoganSquare.parse(signaling.getMessageWrapper().toString(),
|
NCSignalingMessage ncSignalingMessage = LoganSquare.parse(signaling.getMessageWrapper().toString(),
|
||||||
NCSignalingMessage.class);
|
NCSignalingMessage.class);
|
||||||
if (ncSignalingMessage.getRoomType().equals("video")) {
|
processMessage(ncSignalingMessage);
|
||||||
MagicPeerConnectionWrapper magicPeerConnectionWrapper = alwaysGetPeerConnectionWrapperForSessionId
|
} else {
|
||||||
(ncSignalingMessage.getFrom());
|
Log.d(TAG, "Something went very very wrong");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
String type = null;
|
private void processMessage(NCSignalingMessage ncSignalingMessage) {
|
||||||
if (ncSignalingMessage.getPayload() != null && ncSignalingMessage.getPayload().getType() !=
|
if (ncSignalingMessage.getRoomType().equals("video")) {
|
||||||
null) {
|
MagicPeerConnectionWrapper magicPeerConnectionWrapper = alwaysGetPeerConnectionWrapperForSessionId
|
||||||
type = ncSignalingMessage.getPayload().getType();
|
(ncSignalingMessage.getFrom(), false);
|
||||||
} else if (ncSignalingMessage.getType() != null) {
|
|
||||||
type = ncSignalingMessage.getType();
|
String type = null;
|
||||||
|
if (ncSignalingMessage.getPayload() != null && ncSignalingMessage.getPayload().getType() !=
|
||||||
|
null) {
|
||||||
|
type = ncSignalingMessage.getPayload().getType();
|
||||||
|
} else if (ncSignalingMessage.getType() != null) {
|
||||||
|
type = ncSignalingMessage.getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type != null) {
|
||||||
|
switch (type) {
|
||||||
|
case "offer":
|
||||||
|
case "answer":
|
||||||
|
magicPeerConnectionWrapper.setNick(ncSignalingMessage.getPayload().getNick());
|
||||||
|
String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
|
||||||
|
(ncSignalingMessage.getPayload().getSdp(),
|
||||||
|
"VP8", false);
|
||||||
|
|
||||||
|
SessionDescription sessionDescriptionWithPreferredCodec = new SessionDescription(
|
||||||
|
SessionDescription.Type.fromCanonicalForm(type),
|
||||||
|
sessionDescriptionStringWithPreferredCodec);
|
||||||
|
|
||||||
|
if (magicPeerConnectionWrapper.getPeerConnection() != null) {
|
||||||
|
magicPeerConnectionWrapper.getPeerConnection().setRemoteDescription(magicPeerConnectionWrapper
|
||||||
|
.getMagicSdpObserver(), sessionDescriptionWithPreferredCodec);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "candidate":
|
||||||
|
NCIceCandidate ncIceCandidate = ncSignalingMessage.getPayload().getIceCandidate();
|
||||||
|
IceCandidate iceCandidate = new IceCandidate(ncIceCandidate.getSdpMid(),
|
||||||
|
ncIceCandidate.getSdpMLineIndex(), ncIceCandidate.getCandidate());
|
||||||
|
magicPeerConnectionWrapper.addCandidate(iceCandidate);
|
||||||
|
break;
|
||||||
|
case "endOfCandidates":
|
||||||
|
magicPeerConnectionWrapper.drainIceCandidates();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != null) {
|
|
||||||
switch (type) {
|
|
||||||
case "offer":
|
|
||||||
case "answer":
|
|
||||||
magicPeerConnectionWrapper.setNick(ncSignalingMessage.getPayload().getNick());
|
|
||||||
String sessionDescriptionStringWithPreferredCodec = MagicWebRTCUtils.preferCodec
|
|
||||||
(ncSignalingMessage.getPayload().getSdp(),
|
|
||||||
"VP8", false);
|
|
||||||
|
|
||||||
SessionDescription sessionDescriptionWithPreferredCodec = new SessionDescription(
|
|
||||||
SessionDescription.Type.fromCanonicalForm(type),
|
|
||||||
sessionDescriptionStringWithPreferredCodec);
|
|
||||||
|
|
||||||
if (magicPeerConnectionWrapper.getPeerConnection() != null) {
|
|
||||||
magicPeerConnectionWrapper.getPeerConnection().setRemoteDescription(magicPeerConnectionWrapper
|
|
||||||
.getMagicSdpObserver(), sessionDescriptionWithPreferredCodec);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "candidate":
|
|
||||||
NCIceCandidate ncIceCandidate = ncSignalingMessage.getPayload().getIceCandidate();
|
|
||||||
IceCandidate iceCandidate = new IceCandidate(ncIceCandidate.getSdpMid(),
|
|
||||||
ncIceCandidate.getSdpMLineIndex(), ncIceCandidate.getCandidate());
|
|
||||||
magicPeerConnectionWrapper.addCandidate(iceCandidate);
|
|
||||||
break;
|
|
||||||
case "endOfCandidates":
|
|
||||||
magicPeerConnectionWrapper.drainIceCandidates();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.d(TAG, "Something went very very wrong");
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Log.d(TAG, "Something went very very wrong");
|
Log.d(TAG, "Something went very very wrong");
|
||||||
@ -1455,7 +1461,7 @@ public class CallController extends BaseController {
|
|||||||
|
|
||||||
for (String sessionId : newSessions) {
|
for (String sessionId : newSessions) {
|
||||||
if (!hasMCU) {
|
if (!hasMCU) {
|
||||||
alwaysGetPeerConnectionWrapperForSessionId(sessionId);
|
alwaysGetPeerConnectionWrapperForSessionId(sessionId, false);
|
||||||
} else {
|
} else {
|
||||||
webSocketClient.requestOfferForSessionIdWithType(sessionId, "video");
|
webSocketClient.requestOfferForSessionIdWithType(sessionId, "video");
|
||||||
}
|
}
|
||||||
@ -1503,28 +1509,22 @@ public class CallController extends BaseController {
|
|||||||
magicPeerConnectionWrapperList.remove(magicPeerConnectionWrapper);
|
magicPeerConnectionWrapperList.remove(magicPeerConnectionWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MagicPeerConnectionWrapper alwaysGetPeerConnectionWrapperForSessionId(String sessionId) {
|
private MagicPeerConnectionWrapper alwaysGetPeerConnectionWrapperForSessionId(String sessionId, boolean publisher) {
|
||||||
MagicPeerConnectionWrapper magicPeerConnectionWrapper;
|
MagicPeerConnectionWrapper magicPeerConnectionWrapper;
|
||||||
if ((magicPeerConnectionWrapper = getPeerConnectionWrapperForSessionId(sessionId)) != null) {
|
if ((magicPeerConnectionWrapper = getPeerConnectionWrapperForSessionId(sessionId)) != null) {
|
||||||
return magicPeerConnectionWrapper;
|
return magicPeerConnectionWrapper;
|
||||||
} else {
|
} else {
|
||||||
hasMCU = webSocketClient != null && webSocketClient.hasMCU();
|
hasMCU = webSocketClient != null && webSocketClient.hasMCU();
|
||||||
|
|
||||||
MediaConstraints mediaConstraintsToUse;
|
if (hasMCU && publisher) {
|
||||||
|
|
||||||
if (hasMCU) {
|
|
||||||
mediaConstraintsToUse = sdpConstraintsForMCU;
|
|
||||||
} else {
|
|
||||||
mediaConstraintsToUse = sdpConstraints;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sessionId.equals(callSession)) {
|
|
||||||
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
||||||
iceServers, mediaConstraintsToUse, sessionId, callSession, localMediaStream, hasMCU);
|
iceServers, sdpConstraintsForMCU, sessionId, callSession, localMediaStream, true);
|
||||||
|
} else if (hasMCU) {
|
||||||
|
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
||||||
|
iceServers, sdpConstraints, sessionId, callSession, null, false);
|
||||||
} else {
|
} else {
|
||||||
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
magicPeerConnectionWrapper = new MagicPeerConnectionWrapper(peerConnectionFactory,
|
||||||
iceServers, mediaConstraintsToUse, sessionId, callSession, null, hasMCU);
|
iceServers, sdpConstraints, sessionId, callSession, localMediaStream, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
|
magicPeerConnectionWrapperList.add(magicPeerConnectionWrapper);
|
||||||
@ -1626,6 +1626,7 @@ public class CallController extends BaseController {
|
|||||||
ncMessageWrapper.setSessionId(callSession);
|
ncMessageWrapper.setSessionId(callSession);
|
||||||
NCSignalingMessage ncSignalingMessage = new NCSignalingMessage();
|
NCSignalingMessage ncSignalingMessage = new NCSignalingMessage();
|
||||||
ncSignalingMessage.setTo(sessionDescriptionSend.getPeerId());
|
ncSignalingMessage.setTo(sessionDescriptionSend.getPeerId());
|
||||||
|
ncSignalingMessage.setFrom(callSession);
|
||||||
ncSignalingMessage.setRoomType("video");
|
ncSignalingMessage.setRoomType("video");
|
||||||
ncSignalingMessage.setType(sessionDescriptionSend.getType());
|
ncSignalingMessage.setType(sessionDescriptionSend.getType());
|
||||||
NCMessagePayload ncMessagePayload = new NCMessagePayload();
|
NCMessagePayload ncMessagePayload = new NCMessagePayload();
|
||||||
|
@ -75,7 +75,7 @@ public class MagicPeerConnectionWrapper {
|
|||||||
List<PeerConnection.IceServer> iceServerList,
|
List<PeerConnection.IceServer> iceServerList,
|
||||||
MediaConstraints mediaConstraints,
|
MediaConstraints mediaConstraints,
|
||||||
String sessionId, String localSession, @Nullable MediaStream mediaStream,
|
String sessionId, String localSession, @Nullable MediaStream mediaStream,
|
||||||
boolean hasMCU) {
|
boolean isMCUPublisher) {
|
||||||
|
|
||||||
this.localMediaStream = mediaStream;
|
this.localMediaStream = mediaStream;
|
||||||
|
|
||||||
@ -89,11 +89,11 @@ public class MagicPeerConnectionWrapper {
|
|||||||
new MagicPeerConnectionObserver());
|
new MagicPeerConnectionObserver());
|
||||||
|
|
||||||
if (peerConnection != null) {
|
if (peerConnection != null) {
|
||||||
if (localSession != null) {
|
if (localSession != null && localMediaStream != null) {
|
||||||
peerConnection.addStream(localMediaStream);
|
peerConnection.addStream(localMediaStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasInitiated || hasMCU) {
|
if (isMCUPublisher || hasInitiated) {
|
||||||
DataChannel.Init init = new DataChannel.Init();
|
DataChannel.Init init = new DataChannel.Init();
|
||||||
init.negotiated = false;
|
init.negotiated = false;
|
||||||
magicDataChannel = peerConnection.createDataChannel("status", init);
|
magicDataChannel = peerConnection.createDataChannel("status", init);
|
||||||
|
@ -169,6 +169,18 @@ public class MagicWebSocketInstance extends WebSocketListener {
|
|||||||
break;
|
break;
|
||||||
case "message":
|
case "message":
|
||||||
CallOverallWebSocketMessage callOverallWebSocketMessage = LoganSquare.parse(text, CallOverallWebSocketMessage.class);
|
CallOverallWebSocketMessage callOverallWebSocketMessage = LoganSquare.parse(text, CallOverallWebSocketMessage.class);
|
||||||
|
int newId;
|
||||||
|
do {
|
||||||
|
HashMap<String, String> messageHashMap = new HashMap<>();
|
||||||
|
Random rand = new Random();
|
||||||
|
newId = rand.nextInt(1000);
|
||||||
|
if (!concurrentHashMapQueue.contains(newId)) {
|
||||||
|
concurrentHashMapQueue.put(newId, callOverallWebSocketMessage.getCallWebSocketMessage().getNcSignalingMessage());
|
||||||
|
messageHashMap.put("jobId", Integer.toString(newId));
|
||||||
|
eventBus.post(new WebSocketCommunicationEvent("signalingMessage", messageHashMap));
|
||||||
|
}
|
||||||
|
} while (!concurrentHashMapQueue.contains(newId));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user