diff options
Diffstat (limited to 'www/js')
| -rw-r--r-- | www/js/EventServer.js | 81 | ||||
| -rw-r--r-- | www/js/app.js | 5 |
2 files changed, 65 insertions, 21 deletions
diff --git a/www/js/EventServer.js b/www/js/EventServer.js index 9e95adb2..57d4658b 100644 --- a/www/js/EventServer.js +++ b/www/js/EventServer.js @@ -9,50 +9,93 @@ angular.module('zmApp.controllers') .factory('EventServer', -[ 'ZMDataModel', '$rootScope','$websocket', function - ( ZMDataModel, $rootScope, $websocket) { +[ 'ZMDataModel', '$rootScope','$websocket', '$ionicPopup', function + ( ZMDataModel, $rootScope, $websocket, $ionicPopup) { + var websocketActive = 0; + var webSocketBadAuth = 0; + var ws; function start() { - if ($rootScope.websocketActive == 1) + 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+'/?user='+ - loginData.username+'&passwd='+loginData.password; + var evtsvrUrl=loginData.eventServer; // if (ws) ws.$close(); - ZMDataModel.zmLog("Event Server URL constructed as " + evtsvrUrl); - var ws = $websocket.$new ({ - url:evtsvrUrl, - reconnect:true, - reconnectInterval:5000 - }); + + 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, + reconnect:true, + reconnectInterval:5000 + }); + } ws.$on ('$open', function() { ZMDataModel.zmLog("Websocket open"); - $rootScope.websocketActive=1; + 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"); - $rootScope.websocketActive = 0; + websocketActive = 0; }); ws.$on ('$message', function(str) { - ZMDataModel.zmLog("Real-time event: " + str); - var evt=str.split(":"); - var evtStr = "New Alarm in " + evt[0]+" ("+evt[2]+")"; - ZMDataModel.displayBanner('alarm',[evtStr],6000,6000); - - + ZMDataModel.zmLog("Real-time event: " + JSON.stringify(str)); + if (str.status != 'Success') + { + ZMDataModel.zmLog ("Event Error: " + JSON.stringify(str)); + ws.$close(); + webSocketBadAuth = 1; + ZMDataModel.displayBanner('error',['Event server rejected credentials', 'Please re-check credentials'],2000,6000); + + } + if (str.status == 'Success' && str.events) // new events + { + var eventsToDisplay=[]; + for (var iter=0; iter<str.events.length; iter++) + { + eventsToDisplay.push(str.events[iter].Name+": new event ("+str.events[iter].EventId+")"); + + + } + // lets stack the display so they don't overwrite + if (eventsToDisplay.length > 0) + ZMDataModel.displayBanner('alarm', eventsToDisplay, 5000, 5000*eventsToDisplay.length); + $rootScope.isAlarm = 1; + } + + + + + }); } diff --git a/www/js/app.js b/www/js/app.js index 6f1320f7..5ddaf0f7 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -458,7 +458,7 @@ angular.module('zmApp', [ // First run in ionic //------------------------------------------------------------------ -.run(function ($ionicPlatform, $ionicPopup, $rootScope, zm, $state, $stateParams, ZMDataModel, $cordovaSplashscreen, $http, $interval, zmAutoLogin, $fileLogger, $timeout, $ionicHistory, $window, $ionicSideMenuDelegate, EventServer, $websocket) { +.run(function ($ionicPlatform, $ionicPopup, $rootScope, zm, $state, $stateParams, ZMDataModel, $cordovaSplashscreen, $http, $interval, zmAutoLogin, $fileLogger, $timeout, $ionicHistory, $window, $ionicSideMenuDelegate, EventServer) { $rootScope.zmGlobalCookie = ""; $rootScope.isEventFilterOn = false; @@ -669,10 +669,11 @@ angular.module('zmApp', [ //------------------------------------------------------------------ // My route map connecting menu options to their respective templates and controllers -.config(function ($stateProvider, $urlRouterProvider, $httpProvider) { +.config(function ($stateProvider, $urlRouterProvider, $httpProvider, $ionicConfigProvider) { // If you do this, Allow Origin can't be * //$httpProvider.defaults.withCredentials = true; $httpProvider.interceptors.push('timeoutHttpIntercept'); + $ionicConfigProvider.navBar.alignTitle('center'); $stateProvider .state('login', { |
