mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-05 04:15:03 -04:00
start towards glare support (currently not much better but no worse than before) including fixing a lot of self/var self/this fails that caused chaos when we started to have more than one call in play.
This commit is contained in:
parent
806c49a690
commit
fb082cf50f
3 changed files with 116 additions and 60 deletions
|
@ -22,6 +22,7 @@ angular.module('matrixPhoneService', [])
|
|||
};
|
||||
|
||||
matrixPhoneService.INCOMING_CALL_EVENT = "INCOMING_CALL_EVENT";
|
||||
matrixPhoneService.REPLACED_CALL_EVENT = "REPLACED_CALL_EVENT";
|
||||
matrixPhoneService.allCalls = {};
|
||||
|
||||
matrixPhoneService.callPlaced = function(call) {
|
||||
|
@ -38,29 +39,56 @@ angular.module('matrixPhoneService', [])
|
|||
call.call_id = msg.call_id;
|
||||
call.initWithInvite(msg);
|
||||
matrixPhoneService.allCalls[call.call_id] = call;
|
||||
$rootScope.$broadcast(matrixPhoneService.INCOMING_CALL_EVENT, call);
|
||||
|
||||
// Were we trying to call that user (room)?
|
||||
var existingCall;
|
||||
var callIds = Object.keys(matrixPhoneService.allCalls);
|
||||
for (var i = 0; i < callIds.length; ++i) {
|
||||
var thisCallId = callIds[i];
|
||||
var thisCall = matrixPhoneService.allCalls[thisCallId];
|
||||
|
||||
if (call.room_id == thisCall.room_id && thisCall.direction == 'outbound'
|
||||
&& (thisCall.state == 'wait_local_media' || thisCall.state == 'invite_sent' || thisCall.state == 'create_offer')) {
|
||||
existingCall = thisCall;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (existingCall) {
|
||||
if (existingCall.call_id < call.call_id) {
|
||||
console.log("Glare detected: rejecting incoming call "+call.call_id+" and keeping outgoing call "+existingCall.call_id);
|
||||
call.hangup();
|
||||
} else {
|
||||
console.log("Glare detected: answering incoming call "+call.call_id+" and canceling outgoing call "+existingCall.call_id);
|
||||
existingCall.replacedBy(call);
|
||||
call.answer();
|
||||
$rootScope.$broadcast(matrixPhoneService.REPLACED_CALL_EVENT, existingCall, call);
|
||||
}
|
||||
} else {
|
||||
$rootScope.$broadcast(matrixPhoneService.INCOMING_CALL_EVENT, call);
|
||||
}
|
||||
} else if (event.type == 'm.call.answer') {
|
||||
var call = matrixPhoneService.allCalls[msg.call_id];
|
||||
if (!call) {
|
||||
console.trace("Got answer for unknown call ID "+msg.call_id);
|
||||
console.log("Got answer for unknown call ID "+msg.call_id);
|
||||
return;
|
||||
}
|
||||
call.receivedAnswer(msg);
|
||||
} else if (event.type == 'm.call.candidate') {
|
||||
var call = matrixPhoneService.allCalls[msg.call_id];
|
||||
if (!call) {
|
||||
console.trace("Got candidate for unknown call ID "+msg.call_id);
|
||||
console.log("Got candidate for unknown call ID "+msg.call_id);
|
||||
return;
|
||||
}
|
||||
call.gotRemoteIceCandidate(msg.candidate);
|
||||
} else if (event.type == 'm.call.hangup') {
|
||||
var call = matrixPhoneService.allCalls[msg.call_id];
|
||||
if (!call) {
|
||||
console.trace("Got hangup for unknown call ID "+msg.call_id);
|
||||
console.log("Got hangup for unknown call ID "+msg.call_id);
|
||||
return;
|
||||
}
|
||||
call.onHangupReceived();
|
||||
matrixPhoneService.allCalls[msg.call_id] = undefined;
|
||||
delete(matrixPhoneService.allCalls[msg.call_id]);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue