aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js')
-rw-r--r--framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
new file mode 100644
index 00000000..5fd38bf6
--- /dev/null
+++ b/framework/src/onos/web/gui/src/main/webapp/app/view/topo/topoEvent.js
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ ONOS GUI -- Topology Event Module.
+
+ Defines the conduit between the client and the server:
+ - provides a clean API for sending events to the server
+ - dispatches incoming events from the server to the appropriate sub-module
+
+ */
+
+(function () {
+ 'use strict';
+
+ // injected refs
+ var $log, $interval, wss, tps, tis, tfs, tss, tov, tspr;
+
+ // internal state
+ var handlerMap,
+ openListener,
+ heartbeatTimer;
+
+ var heartbeatPeriod = 9000; // 9 seconds
+
+ // ==========================
+
+ function createHandlerMap() {
+ handlerMap = {
+ showSummary: tps,
+
+ showDetails: tss,
+
+ showHighlights: tov,
+
+ addInstance: tis,
+ updateInstance: tis,
+ removeInstance: tis,
+
+ addDevice: tfs,
+ updateDevice: tfs,
+ removeDevice: tfs,
+ addHost: tfs,
+ updateHost: tfs,
+ removeHost: tfs,
+ addLink: tfs,
+ updateLink: tfs,
+ removeLink: tfs,
+
+ spriteListResponse: tspr,
+ spriteDataResponse: tspr
+ };
+ }
+
+ function wsOpen(host, url) {
+ $log.debug('TOPO: web socket open - cluster node:', host, 'URL:', url);
+ // Request batch of initial data from the new server
+ wss.sendEvent('topoStart');
+ }
+
+ function cancelHeartbeat() {
+ if (heartbeatTimer) {
+ $interval.cancel(heartbeatTimer);
+ }
+ heartbeatTimer = null;
+ }
+
+ function scheduleHeartbeat() {
+ cancelHeartbeat();
+ heartbeatTimer = $interval(function () {
+ wss.sendEvent('topoHeartbeat');
+ }, heartbeatPeriod);
+ }
+
+
+ angular.module('ovTopo')
+ .factory('TopoEventService',
+ ['$log', '$interval', 'WebSocketService',
+ 'TopoPanelService', 'TopoInstService', 'TopoForceService',
+ 'TopoSelectService', 'TopoOverlayService', 'TopoSpriteService',
+
+ function (_$log_, _$interval_, _wss_,
+ _tps_, _tis_, _tfs_, _tss_, _tov_, _tspr_) {
+ $log = _$log_;
+ $interval = _$interval_;
+ wss = _wss_;
+ tps = _tps_;
+ tis = _tis_;
+ tfs = _tfs_;
+ tss = _tss_;
+ tov = _tov_;
+ tspr = _tspr_;
+
+ createHandlerMap();
+
+ function start() {
+ openListener = wss.addOpenListener(wsOpen);
+ wss.bindHandlers(handlerMap);
+ wss.sendEvent('topoStart');
+ scheduleHeartbeat();
+ $log.debug('topo comms started');
+ }
+
+ function stop() {
+ cancelHeartbeat();
+ wss.sendEvent('topoStop');
+ wss.unbindHandlers(handlerMap);
+ wss.removeOpenListener(openListener);
+ openListener = null;
+ $log.debug('topo comms stopped');
+ }
+
+ return {
+ start: start,
+ stop: stop
+ };
+ }]);
+}());