diff options
Diffstat (limited to 'www/js')
| -rw-r--r-- | www/js/EventServer.js | 103 | ||||
| -rw-r--r-- | www/js/PortalLoginCtrl.js | 16 | ||||
| -rw-r--r-- | www/js/app.js | 1 |
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; |
