Retry sending events that fail to send.
parent
6c81752e46
commit
cc2cee4af6
|
@ -41,7 +41,7 @@ window.RTCSessionDescription = window.RTCSessionDescription || window.webkitRTCS
|
|||
window.RTCIceCandidate = window.RTCIceCandidate || window.webkitRTCIceCandidate || window.mozRTCIceCandidate;
|
||||
|
||||
angular.module('MatrixCall', [])
|
||||
.factory('MatrixCall', ['matrixService', 'matrixPhoneService', '$rootScope', function MatrixCallFactory(matrixService, matrixPhoneService, $rootScope) {
|
||||
.factory('MatrixCall', ['matrixService', 'matrixPhoneService', '$rootScope', '$timeout', function MatrixCallFactory(matrixService, matrixPhoneService, $rootScope, $timeout) {
|
||||
var MatrixCall = function(room_id) {
|
||||
this.room_id = room_id;
|
||||
this.call_id = "c" + new Date().getTime();
|
||||
|
@ -120,7 +120,7 @@ angular.module('MatrixCall', [])
|
|||
version: 0,
|
||||
call_id: this.call_id,
|
||||
};
|
||||
matrixService.sendEvent(this.room_id, 'm.call.hangup', undefined, content).then(this.messageSent, this.messageSendFailed);
|
||||
this.sendEventWithRetry('m.call.hangup', content);
|
||||
this.state = 'ended';
|
||||
if (this.onHangup && !suppressEvent) this.onHangup(this);
|
||||
};
|
||||
|
@ -179,7 +179,7 @@ angular.module('MatrixCall', [])
|
|||
call_id: this.call_id,
|
||||
candidate: event.candidate
|
||||
};
|
||||
matrixService.sendEvent(this.room_id, 'm.call.candidate', undefined, content).then(this.messageSent, this.messageSendFailed);
|
||||
this.sendEventWithRetry('m.call.candidate', content);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -216,7 +216,7 @@ angular.module('MatrixCall', [])
|
|||
call_id: this.call_id,
|
||||
offer: description
|
||||
};
|
||||
matrixService.sendEvent(this.room_id, 'm.call.invite', undefined, content).then(this.messageSent, this.messageSendFailed);
|
||||
this.sendEventWithRetry('m.call.invite', content);
|
||||
|
||||
var self = this;
|
||||
$rootScope.$apply(function() {
|
||||
|
@ -232,19 +232,13 @@ angular.module('MatrixCall', [])
|
|||
call_id: this.call_id,
|
||||
answer: description
|
||||
};
|
||||
matrixService.sendEvent(this.room_id, 'm.call.answer', undefined, content).then(this.messageSent, this.messageSendFailed);
|
||||
this.sendEventWithRetry('m.call.answer', content);
|
||||
var self = this;
|
||||
$rootScope.$apply(function() {
|
||||
self.state = 'connecting';
|
||||
});
|
||||
};
|
||||
|
||||
MatrixCall.prototype.messageSent = function() {
|
||||
};
|
||||
|
||||
MatrixCall.prototype.messageSendFailed = function(error) {
|
||||
};
|
||||
|
||||
MatrixCall.prototype.getLocalOfferFailed = function(error) {
|
||||
this.onError("Failed to start audio for call!");
|
||||
};
|
||||
|
@ -353,5 +347,28 @@ angular.module('MatrixCall', [])
|
|||
this.hangup(true);
|
||||
};
|
||||
|
||||
MatrixCall.prototype.sendEventWithRetry = function(evType, content) {
|
||||
var ev = { type:evType, content:content, tries:1 };
|
||||
var self = this;
|
||||
matrixService.sendEvent(this.room_id, evType, undefined, content).then(this.eventSent, function(error) { self.eventSendFailed(ev, error); } );
|
||||
};
|
||||
|
||||
MatrixCall.prototype.eventSent = function() {
|
||||
};
|
||||
|
||||
MatrixCall.prototype.eventSendFailed = function(ev, error) {
|
||||
if (ev.tries > 5) {
|
||||
console.log("Failed to send event of type "+ev.type+" on attempt "+ev.tries+". Giving up.");
|
||||
return;
|
||||
}
|
||||
var delayMs = 500 * Math.pow(2, ev.tries);
|
||||
console.log("Failed to send event of type "+ev.type+". Retrying in "+delayMs+"ms");
|
||||
++ev.tries;
|
||||
var self = this;
|
||||
$timeout(function() {
|
||||
matrixService.sendEvent(self.room_id, ev.type, undefined, ev.content).then(self.eventSent, function(error) { self.eventSendFailed(ev, error); } );
|
||||
}, delayMs);
|
||||
};
|
||||
|
||||
return MatrixCall;
|
||||
}]);
|
||||
|
|
Loading…
Reference in New Issue