"use strict";
angular.module("socketExample",[])
.service("socketExampleService", ["$timeout", "$interval", "$q",
function($timeout, $interval, $q){
var sock = null;
var promises = [];
var cnt = 1;
var initialize = function() {
var deferred = $q.defer();
$timeout(function(){
sock = new WebSocket("someWebSocketUrl");
sock.onopen = function() {
console.log("Successful");
$interval(function(){
sock.send("");
}, 5000);
};
sock.onmessage = function(event) {
// do something
}
sock.onclose = function() {
console.log("closed");
};
sock.onerror = function(err) {
console.log("error");
};
deferred.resolve(true);
} else {
deferred.reject(false);
}
}, 1000);
return deferred.promise;
}
this.setup = function() {
promises[0] = initialize();
var exitLoop = false;
var maxRetries = 5;
while(promises.length < maxRetries && !exitLoop) { // remove this while-loop - works!
promises[promises.length - 1].then(function(result){
if(!result)
promises[promises.length] = initialize();
else
exitLoop = true;
}, function(reason){
promises[promises.length] = initialize();
});
}
}
}])
;