From fd1231a0a6957d5d367260838c35d1b35f0823f3 Mon Sep 17 00:00:00 2001 From: Simon Hunt Date: Mon, 26 Jan 2015 22:14:51 -0800 Subject: [PATCH] GUI -- Refactored Topo View to move websocket code into TopoEventService. - now it is more properly encapsulated. Change-Id: Ib5cb88acf63e78be648ff45e737c76041b53e44b --- web/gui/src/main/webapp/app/view/topo/topo.js | 59 ++---------- .../main/webapp/app/view/topo/topoEvent.js | 96 +++++++++++++++---- 2 files changed, 86 insertions(+), 69 deletions(-) diff --git a/web/gui/src/main/webapp/app/view/topo/topo.js b/web/gui/src/main/webapp/app/view/topo/topo.js index 480e499ab0..66386f975b 100644 --- a/web/gui/src/main/webapp/app/view/topo/topo.js +++ b/web/gui/src/main/webapp/app/view/topo/topo.js @@ -28,13 +28,13 @@ ]; // references to injected services etc. - var $log, ks, zs, gs, ms, ps, wss, tes; + var $log, ks, zs, gs, ms, ps, tes; // DOM elements var ovtopo, svg, defs, zoomLayer, map; // Internal state - var zoomer, wsock, evDispatcher; + var zoomer, evDispatcher; // Note: "exported" state should be properties on 'self' variable @@ -129,44 +129,6 @@ //showCallibrationPoints(); } - // --- Web Socket Connection ----------------------------------------- - // TODO: migrate this code to be encapsulated by TopoEventService - - function onWsOpen() { - $log.log('web socket opened...'); - evDispatcher.sendEvent('requestSummary'); - } - - function onWsMessage(ev) { - evDispatcher.handleEvent(ev); - } - - function onWsClose(reason) { - $log.log('web socket closed; reason=', reason); - wsock = null; - tes.bindSock(null); - } - - // wsport indicates web-socket-server port other than the default. - // Used for testing with the mock-web-socket-server. - function setUpWebSocket(wsport) { - wsock = wss.createWebSocket('topology', { - onOpen: onWsOpen, - onMessage: onWsMessage, - onClose: onWsClose, - wsport: wsport - }); - - tes.bindSock(wsock); - - // TODO: handle "guiSuccessor" functionality (replace host) - // TODO: implement retry on close functionality - - - $log.log('created web socket', wsock); - // TODO: complete implementation... - - } // --- Controller Definition ----------------------------------------- @@ -175,10 +137,10 @@ .controller('OvTopoCtrl', [ '$scope', '$log', '$location', '$timeout', 'KeyService', 'ZoomService', 'GlyphService', 'MapService', - 'PanelService', 'WebSocketService', 'TopoEventService', + 'PanelService', 'TopoEventService', function ($scope, _$log_, $loc, $timeout, - _ks_, _zs_, _gs_, _ms_, _ps_, _wss_, _tes_) { + _ks_, _zs_, _gs_, _ms_, _ps_, _tes_) { var self = this; $log = _$log_; ks = _ks_; @@ -186,7 +148,6 @@ gs = _gs_; ms = _ms_; ps = _ps_; - wss = _wss_; tes = _tes_; self.notifyResize = function () { @@ -196,9 +157,7 @@ // Cleanup on destroyed scope.. $scope.$on('$destroy', function () { $log.log('OvTopoCtrl is saying Buh-Bye!'); - wsock && wsock.close(); - wsock = null; - tes.bindSock(null); + tes.closeSock(); ps.destroyPanel('topo-p-summary'); }); @@ -206,14 +165,16 @@ ovtopo = d3.select('#ov-topo'); svg = ovtopo.select('svg'); - // bind to topo event service.. - evDispatcher = tes.dispatcher; + // bind to topo event dispatcher.. + evDispatcher = tes.bindDispatcher('TODO: topo-DOM-elements-here'); setUpKeys(); setUpDefs(); setUpZoom(); setUpMap(); - setUpWebSocket($loc.search().wsport); + + // open up a connection to the server... + tes.openSock(); // TODO: remove this temporary code.... var p = ps.createPanel('topo-p-summary'); diff --git a/web/gui/src/main/webapp/app/view/topo/topoEvent.js b/web/gui/src/main/webapp/app/view/topo/topoEvent.js index 943c883444..73bcc25400 100644 --- a/web/gui/src/main/webapp/app/view/topo/topoEvent.js +++ b/web/gui/src/main/webapp/app/view/topo/topoEvent.js @@ -22,11 +22,17 @@ (function () { 'use strict'; - var $log, wes; + // injected refs + var $log, wss, wes; + + // internal state + var wsock; var evHandler = { showSummary: showSummary, addInstance: addInstance + // TODO: implement remaining handlers.. + }; function unknownEvent(ev) { @@ -43,31 +49,81 @@ $log.log(' *** We got an ADD INSTANCE event: ', ev); } + // ========================== + + var dispatcher = { + handleEvent: function (ev) { + (evHandler[ev.event] || unknownEvent)(ev); + }, + sendEvent: function (evType, payload) { + if (wsock) { + wes.sendEvent(wsock, evType, payload); + } else { + $log.warn('sendEvent: no websocket open:', evType, payload); + } + } + }; + + // === Web Socket functions === + + function onWsOpen() { + $log.debug('web socket opened...'); + // kick off request for periodic summary data... + dispatcher.sendEvent('requestSummary'); + } + + function onWsMessage(ev) { + dispatcher.handleEvent(ev); + } + + function onWsClose(reason) { + $log.log('web socket closed; reason=', reason); + wsock = null; + } + + // ========================== + angular.module('ovTopo') - .factory('TopoEventService', ['$log', 'WsEventService', - function (_$log_, _wes_) { + .factory('TopoEventService', + ['$log', '$location', 'WebSocketService', 'WsEventService', + + function (_$log_, $loc, _wss_, _wes_) { $log = _$log_; + wss = _wss_; wes = _wes_; - var wsock; + function bindDispatcher(TopoDomElementsPassedHere) { + // TODO: store refs to topo DOM elements... + + return dispatcher; + } + + // TODO: handle "guiSuccessor" functionality (replace host) + // TODO: implement retry on close functionality + function openSock() { + wsock = wss.createWebSocket('topology', { + onOpen: onWsOpen, + onMessage: onWsMessage, + onClose: onWsClose, + wsport: $loc.search().wsport + }); + $log.debug('web socket opened:', wsock); + } + + function closeSock() { + var path; + if (wsock) { + path = wsock.meta.path; + wsock.close(); + wsock = null; + $log.debug('web socket closed. path:', path); + } + } return { - dispatcher: { - handleEvent: function (ev) { - (evHandler[ev.event] || unknownEvent)(ev); - }, - sendEvent: function (evType, payload) { - if (wsock) { - wes.sendEvent(wsock, evType, payload); - } else { - $log.warn('sendEvent: no websocket open:', - evType, payload); - } - } - }, - bindSock: function (ws) { - wsock = ws; - } + bindDispatcher: bindDispatcher, + openSock: openSock, + closeSock: closeSock } }]); }());