summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--www/js/EventServer.js103
-rw-r--r--www/js/PortalLoginCtrl.js16
-rw-r--r--www/js/app.js1
3 files changed, 58 insertions, 62 deletions
diff --git a/www/js/EventServer.js b/www/js/EventServer.js
index 5bb00abf..f0d596a6 100644
--- a/www/js/EventServer.js
+++ b/www/js/EventServer.js
@@ -13,65 +13,39 @@ angular.module('zmApp.controllers')
( ZMDataModel, $rootScope, $websocket, $ionicPopup) {
- var websocketActive = 0;
- var webSocketBadAuth = 0;
- var ws;
-
-
- // FIXME: needs cleaninup up
- // on iOS this socket will die after switching to background (eventually)
- // on Android it will keep running
- // on Android I need to see why websockets are getting duplicated on server
- // disconnect
-
- function start()
+ var ws;
+
+ function init()
{
- if (websocketActive == 1)
- {
- ZMDataModel.zmDebug ("Connection established. Not doing WebSocketInit again...");
- return;
- }
-
- if (webSocketBadAuth == 1)
- {
- webSocketBadAuth = 0;
- ZMDataModel.zmLog("Retrying websocket auth");
- ws.$open();
- return;
- }
var loginData = ZMDataModel.getLogin();
-
-
if (loginData.eventServer)
{
- var evtsvrUrl=loginData.eventServer;
- // if (ws) ws.$close();
-
- if (typeof ws === 'undefined' || ws.$status == ws.$CLOSED )
- {
- ZMDataModel.zmLog ("%%%%%%%%%%%%%%%%%%%%%% NEW WEBSOCKET %%%%%%%%%%");
- //console.log (">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+ws.$status());
- ZMDataModel.zmLog("Event Server URL constructed as " + evtsvrUrl);
- ws = $websocket.$new ({
- url:evtsvrUrl,
+ ZMDataModel.zmLog("Initializing Websocket with URL " +
+ loginData.eventServer+" , will connect later...");
+ ws = $websocket.$new ({
+ url:loginData.eventServer,
reconnect:true,
- reconnectInterval:5000
+ reconnectInterval:5000,
+ lazy:true
});
- }
-
+ }
+ else
+ {
+ ZMDataModel.zmLog("No Event Server configured. Skipping initialization");
+ }
+
+
ws.$on ('$open', function() {
ZMDataModel.zmLog("Websocket open");
ws.$emit('auth',
{user:loginData.username,
password:loginData.password});
- // we will retry on resume of app
- // but since we called close, it won't retry on its own
- websocketActive=0;
+
});
ws.$on ('$close', function() {
ZMDataModel.zmLog ("Websocket closed");
- websocketActive = 0;
+
});
ws.$on ('$message', function(str) {
@@ -80,7 +54,6 @@ angular.module('zmApp.controllers')
{
ZMDataModel.zmLog ("Event Error: " + JSON.stringify(str));
ws.$close();
- webSocketBadAuth = 1;
ZMDataModel.displayBanner('error',['Event server rejected credentials', 'Please re-check credentials'],2000,6000);
}
@@ -104,17 +77,49 @@ angular.module('zmApp.controllers')
});
-
+
+
+ }
+
+ // FIXME: needs cleaninup up
+ // on iOS this socket will die after switching to background (eventually)
+ // on Android it will keep running
+ // on Android I need to see why websockets are getting duplicated on server
+ // disconnect
+
+ function refresh()
+ {
+ var loginData = ZMDataModel.getLogin();
+
+ if (!loginData.eventServer)
+ {
+ ZMDataModel.zmLog("No Event Server configured, skipping refresh");
+ return;
}
- else
+
+
+ // refresh is called when
+ // The following situations will close the socket
+ // a) In iOS the client went to background -- we should reconnect
+ // b) The Event Server died
+ // c) The network died
+ // Seems to me in all cases we should give re-open a shot
+
+
+ if (ws.$status() == ws.$CLOSED)
{
- ZMDataModel.zmLog("No Event Server configured, skipping");
+ ZMDataModel.zmLog("Websocket was closed, trying to re-open");
+ ws.$open();
}
+
+
+
}
return {
- start:start
+ refresh:refresh,
+ init:init
};
diff --git a/www/js/PortalLoginCtrl.js b/www/js/PortalLoginCtrl.js
index 4207c18e..ee4d0e12 100644
--- a/www/js/PortalLoginCtrl.js
+++ b/www/js/PortalLoginCtrl.js
@@ -86,7 +86,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
$state.go('lowversion', {"ver":data});
}
});
- initWebSocket();
+ EventServer.refresh();
$state.go($rootScope.lastState ? $rootScope.lastState : 'montage', $rootScope.lastStateParam);
},
// coming here means auth error
@@ -144,17 +144,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
return 0;
}
- function initWebSocket()
- {
- var loginData = ZMDataModel.getLogin();
-
-
- ZMDataModel.zmLog (" webSocketStart: attempting to start a WSS connection");
- EventServer.start();
- $rootScope.websocketActive = 1;
-
-
- }
+
function unlock(touchVerified) {
ZMDataModel.zmDebug("Trying to unlock PIN");
@@ -166,7 +156,7 @@ angular.module('zmApp.controllers').controller('zmApp.PortalLoginCtrl', ['$ionic
zmAutoLogin.doLogin("authenticating...")
.then(function (data) // success
{
- initWebSocket();
+ EventServer.refresh();
// don't get stuck in this state
// will happen if you switch to background in portal state
if ($rootScope.lastState == "zm-portal-login") {
diff --git a/www/js/app.js b/www/js/app.js
index c4ad9300..c9918312 100644
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -474,6 +474,7 @@ angular.module('zmApp', [
//console.log ("HERE");
ZMDataModel.init();
+ EventServer.init();
// for making sure we canuse $state.go with ng-click
// needed for views that use popovers
$rootScope.$state = $state;