Retry sending events that fail to send.
This commit is contained in:
parent
6c81752e46
commit
cc2cee4af6
1 changed files with 28 additions and 11 deletions
|
@ -41,7 +41,7 @@ window.RTCSessionDescription = window.RTCSessionDescription || window.webkitRTCS
|
||||||
window.RTCIceCandidate = window.RTCIceCandidate || window.webkitRTCIceCandidate || window.mozRTCIceCandidate;
|
window.RTCIceCandidate = window.RTCIceCandidate || window.webkitRTCIceCandidate || window.mozRTCIceCandidate;
|
||||||
|
|
||||||
angular.module('MatrixCall', [])
|
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) {
|
var MatrixCall = function(room_id) {
|
||||||
this.room_id = room_id;
|
this.room_id = room_id;
|
||||||
this.call_id = "c" + new Date().getTime();
|
this.call_id = "c" + new Date().getTime();
|
||||||
|
@ -120,7 +120,7 @@ angular.module('MatrixCall', [])
|
||||||
version: 0,
|
version: 0,
|
||||||
call_id: this.call_id,
|
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';
|
this.state = 'ended';
|
||||||
if (this.onHangup && !suppressEvent) this.onHangup(this);
|
if (this.onHangup && !suppressEvent) this.onHangup(this);
|
||||||
};
|
};
|
||||||
|
@ -179,7 +179,7 @@ angular.module('MatrixCall', [])
|
||||||
call_id: this.call_id,
|
call_id: this.call_id,
|
||||||
candidate: event.candidate
|
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,
|
call_id: this.call_id,
|
||||||
offer: description
|
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;
|
var self = this;
|
||||||
$rootScope.$apply(function() {
|
$rootScope.$apply(function() {
|
||||||
|
@ -232,19 +232,13 @@ angular.module('MatrixCall', [])
|
||||||
call_id: this.call_id,
|
call_id: this.call_id,
|
||||||
answer: description
|
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;
|
var self = this;
|
||||||
$rootScope.$apply(function() {
|
$rootScope.$apply(function() {
|
||||||
self.state = 'connecting';
|
self.state = 'connecting';
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
MatrixCall.prototype.messageSent = function() {
|
|
||||||
};
|
|
||||||
|
|
||||||
MatrixCall.prototype.messageSendFailed = function(error) {
|
|
||||||
};
|
|
||||||
|
|
||||||
MatrixCall.prototype.getLocalOfferFailed = function(error) {
|
MatrixCall.prototype.getLocalOfferFailed = function(error) {
|
||||||
this.onError("Failed to start audio for call!");
|
this.onError("Failed to start audio for call!");
|
||||||
};
|
};
|
||||||
|
@ -353,5 +347,28 @@ angular.module('MatrixCall', [])
|
||||||
this.hangup(true);
|
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;
|
return MatrixCall;
|
||||||
}]);
|
}]);
|
||||||
|
|
Loading…
Reference in a new issue