Deprecating old web-socket stuff and adding ability for client-side message hand…
…ler registration. Failover still to be done and same for the async hooks. Change-Id: I6029c91eb1a04e01401e495b9673ddaea728e215
Showing
14 changed files
with
158 additions
and
144 deletions
... | @@ -31,6 +31,7 @@ import java.util.TimerTask; | ... | @@ -31,6 +31,7 @@ import java.util.TimerTask; |
31 | /** | 31 | /** |
32 | * Web socket servlet capable of creating various sockets for the user interface. | 32 | * Web socket servlet capable of creating various sockets for the user interface. |
33 | */ | 33 | */ |
34 | +@Deprecated | ||
34 | public class GuiWebSocketServlet extends WebSocketServlet { | 35 | public class GuiWebSocketServlet extends WebSocketServlet { |
35 | 36 | ||
36 | private static final long PING_DELAY_MS = 5000; | 37 | private static final long PING_DELAY_MS = 5000; | ... | ... |
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
... | @@ -98,6 +98,7 @@ import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED; | ... | @@ -98,6 +98,7 @@ import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED; |
98 | /** | 98 | /** |
99 | * Facility for creating messages bound for the topology viewer. | 99 | * Facility for creating messages bound for the topology viewer. |
100 | */ | 100 | */ |
101 | +@Deprecated | ||
101 | public abstract class TopologyViewMessages { | 102 | public abstract class TopologyViewMessages { |
102 | 103 | ||
103 | protected static final Logger log = LoggerFactory.getLogger(TopologyViewMessages.class); | 104 | protected static final Logger log = LoggerFactory.getLogger(TopologyViewMessages.class); | ... | ... |
... | @@ -77,6 +77,7 @@ import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED; | ... | @@ -77,6 +77,7 @@ import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED; |
77 | /** | 77 | /** |
78 | * Web socket capable of interacting with the GUI topology view. | 78 | * Web socket capable of interacting with the GUI topology view. |
79 | */ | 79 | */ |
80 | +@Deprecated | ||
80 | public class TopologyViewWebSocket | 81 | public class TopologyViewWebSocket |
81 | extends TopologyViewMessages | 82 | extends TopologyViewMessages |
82 | implements WebSocket.OnTextMessage, WebSocket.OnControl { | 83 | implements WebSocket.OnTextMessage, WebSocket.OnControl { | ... | ... |
... | @@ -59,7 +59,7 @@ public class UiExtensionManager implements UiExtensionService { | ... | @@ -59,7 +59,7 @@ public class UiExtensionManager implements UiExtensionService { |
59 | List<UiView> coreViews = of(new UiView("sample", "Sample"), | 59 | List<UiView> coreViews = of(new UiView("sample", "Sample"), |
60 | new UiView("topo", "Topology View"), | 60 | new UiView("topo", "Topology View"), |
61 | new UiView("device", "Devices")); | 61 | new UiView("device", "Devices")); |
62 | - UiMessageHandlerFactory messageHandlerFactory = null; | 62 | + UiMessageHandlerFactory messageHandlerFactory = () -> ImmutableList.of(new TopologyViewMessageHandler()); |
63 | return new UiExtension(coreViews, messageHandlerFactory, "core", | 63 | return new UiExtension(coreViews, messageHandlerFactory, "core", |
64 | UiExtensionManager.class.getClassLoader()); | 64 | UiExtensionManager.class.getClassLoader()); |
65 | } | 65 | } | ... | ... |
... | @@ -22,6 +22,7 @@ import org.onlab.osgi.ServiceDirectory; | ... | @@ -22,6 +22,7 @@ import org.onlab.osgi.ServiceDirectory; |
22 | import org.onosproject.ui.UiConnection; | 22 | import org.onosproject.ui.UiConnection; |
23 | import org.onosproject.ui.UiExtensionService; | 23 | import org.onosproject.ui.UiExtensionService; |
24 | import org.onosproject.ui.UiMessageHandler; | 24 | import org.onosproject.ui.UiMessageHandler; |
25 | +import org.onosproject.ui.UiMessageHandlerFactory; | ||
25 | import org.slf4j.Logger; | 26 | import org.slf4j.Logger; |
26 | import org.slf4j.LoggerFactory; | 27 | import org.slf4j.LoggerFactory; |
27 | 28 | ||
... | @@ -117,7 +118,7 @@ public class UiWebSocket | ... | @@ -117,7 +118,7 @@ public class UiWebSocket |
117 | lastActive = System.currentTimeMillis(); | 118 | lastActive = System.currentTimeMillis(); |
118 | try { | 119 | try { |
119 | ObjectNode message = (ObjectNode) mapper.reader().readTree(data); | 120 | ObjectNode message = (ObjectNode) mapper.reader().readTree(data); |
120 | - String type = message.path("type").asText("unknown"); | 121 | + String type = message.path("event").asText("unknown"); |
121 | UiMessageHandler handler = handlers.get(type); | 122 | UiMessageHandler handler = handlers.get(type); |
122 | if (handler != null) { | 123 | if (handler != null) { |
123 | handler.process(message); | 124 | handler.process(message); |
... | @@ -146,10 +147,15 @@ public class UiWebSocket | ... | @@ -146,10 +147,15 @@ public class UiWebSocket |
146 | private void createHandlers() { | 147 | private void createHandlers() { |
147 | handlers = new HashMap<>(); | 148 | handlers = new HashMap<>(); |
148 | UiExtensionService service = directory.get(UiExtensionService.class); | 149 | UiExtensionService service = directory.get(UiExtensionService.class); |
149 | - service.getExtensions().forEach(ext -> ext.messageHandlerFactory().newHandlers().forEach(handler -> { | 150 | + service.getExtensions().forEach(ext -> { |
150 | - handler.init(this, directory); | 151 | + UiMessageHandlerFactory factory = ext.messageHandlerFactory(); |
151 | - handler.messageTypes().forEach(type -> handlers.put(type, handler)); | 152 | + if (factory != null) { |
152 | - })); | 153 | + factory.newHandlers().forEach(handler -> { |
154 | + handler.init(this, directory); | ||
155 | + handler.messageTypes().forEach(type -> handlers.put(type, handler)); | ||
156 | + }); | ||
157 | + } | ||
158 | + }); | ||
153 | } | 159 | } |
154 | 160 | ||
155 | // Destroys message handlers. | 161 | // Destroys message handlers. | ... | ... |
... | @@ -151,12 +151,24 @@ | ... | @@ -151,12 +151,24 @@ |
151 | 151 | ||
152 | <servlet> | 152 | <servlet> |
153 | <servlet-name>Web Socket Service</servlet-name> | 153 | <servlet-name>Web Socket Service</servlet-name> |
154 | - <servlet-class>org.onosproject.ui.impl.GuiWebSocketServlet</servlet-class> | 154 | + <servlet-class>org.onosproject.ui.impl.UiWebSocketServlet</servlet-class> |
155 | <load-on-startup>2</load-on-startup> | 155 | <load-on-startup>2</load-on-startup> |
156 | </servlet> | 156 | </servlet> |
157 | 157 | ||
158 | <servlet-mapping> | 158 | <servlet-mapping> |
159 | <servlet-name>Web Socket Service</servlet-name> | 159 | <servlet-name>Web Socket Service</servlet-name> |
160 | + <url-pattern>/websock/*</url-pattern> | ||
161 | + </servlet-mapping> | ||
162 | + | ||
163 | + | ||
164 | + <servlet> | ||
165 | + <servlet-name>Legacy Web Socket Service</servlet-name> | ||
166 | + <servlet-class>org.onosproject.ui.impl.GuiWebSocketServlet</servlet-class> | ||
167 | + <load-on-startup>2</load-on-startup> | ||
168 | + </servlet> | ||
169 | + | ||
170 | + <servlet-mapping> | ||
171 | + <servlet-name>Legacy Web Socket Service</servlet-name> | ||
160 | <url-pattern>/ws/*</url-pattern> | 172 | <url-pattern>/ws/*</url-pattern> |
161 | </servlet-mapping> | 173 | </servlet-mapping> |
162 | 174 | ... | ... |
... | @@ -22,7 +22,7 @@ | ... | @@ -22,7 +22,7 @@ |
22 | 22 | ||
23 | var uiContext = '/onos/ui/', | 23 | var uiContext = '/onos/ui/', |
24 | rsSuffix = uiContext + 'rs/', | 24 | rsSuffix = uiContext + 'rs/', |
25 | - wsSuffix = uiContext + 'ws/'; | 25 | + wsSuffix = uiContext + 'websock/'; |
26 | 26 | ||
27 | angular.module('onosRemote') | 27 | angular.module('onosRemote') |
28 | .factory('UrlFnService', ['$location', function ($loc) { | 28 | .factory('UrlFnService', ['$location', function ($loc) { | ... | ... |
... | @@ -20,62 +20,105 @@ | ... | @@ -20,62 +20,105 @@ |
20 | (function () { | 20 | (function () { |
21 | 'use strict'; | 21 | 'use strict'; |
22 | 22 | ||
23 | - var fs; | 23 | + // injected refs |
24 | + var fs, $log; | ||
24 | 25 | ||
25 | - function fnOpen(f) { | 26 | + // internal state |
26 | - // wrap the onOpen function; we will handle any housekeeping here... | 27 | + var ws, sws, sid = 0, |
27 | - if (!fs.isF(f)) { | 28 | + handlers = {}; |
28 | - return null; | 29 | + |
30 | + function resetSid() { | ||
31 | + sid = 0; | ||
32 | + } | ||
33 | + | ||
34 | + // Binds the specified message handlers. | ||
35 | + function bindHandlers(handlerMap) { | ||
36 | + var m = d3.map(handlerMap), | ||
37 | + dups = []; | ||
38 | + | ||
39 | + m.forEach(function (key, value) { | ||
40 | + var fn = fs.isF(value[key]); | ||
41 | + if (!fn) { | ||
42 | + $log.warn(key + ' binding not a function on ' + value); | ||
43 | + return; | ||
44 | + } | ||
45 | + | ||
46 | + if (handlers[key]) { | ||
47 | + dups.push(key); | ||
48 | + } else { | ||
49 | + handlers[key] = fn; | ||
50 | + } | ||
51 | + }); | ||
52 | + if (dups.length) { | ||
53 | + $log.warn('duplicate bindings ignored:', dups); | ||
29 | } | 54 | } |
55 | + } | ||
30 | 56 | ||
31 | - return function (openEvent) { | 57 | + // Unbinds the specified message handlers. |
32 | - // NOTE: nothing worth passing to the caller? | 58 | + function unbindHandlers(handlerMap) { |
33 | - f(); | 59 | + var m = d3.map(handlerMap); |
34 | - }; | 60 | + m.forEach(function (key) { |
61 | + delete handlers[key]; | ||
62 | + }); | ||
35 | } | 63 | } |
36 | 64 | ||
37 | - function fnMessage(f) { | 65 | + // Formulates an event message and sends it via the shared web-socket. |
38 | - // wrap the onMessage function; we will attempt to decode the | 66 | + function sendEvent(evType, payload) { |
39 | - // message event payload as JSON and pass that in... | 67 | + var p = payload || {}; |
40 | - if (!fs.isF(f)) { | 68 | + if (sws) { |
41 | - return null; | 69 | + $log.debug(' *Tx* >> ', evType, payload); |
70 | + sws.send({ | ||
71 | + event: evType, | ||
72 | + sid: ++sid, | ||
73 | + payload: p | ||
74 | + }); | ||
75 | + } else { | ||
76 | + $log.warn('sendEvent: no websocket open:', evType, payload); | ||
42 | } | 77 | } |
78 | + } | ||
43 | 79 | ||
44 | - return function (msgEvent) { | 80 | + |
45 | - var ev; | 81 | + // Handles the specified message using handler bindings. |
46 | - try { | 82 | + function handleMessage(msgEvent) { |
47 | - ev = JSON.parse(msgEvent.data); | 83 | + var ev; |
48 | - } catch (e) { | 84 | + try { |
49 | - ev = { | 85 | + ev = JSON.parse(msgEvent.data); |
50 | - error: 'Failed to parse JSON', | 86 | + $log.debug(' *Rx* >> ', ev.event, ev.payload); |
51 | - e: e | 87 | + dispatchToHandler(ev); |
52 | - }; | 88 | + } catch (e) { |
53 | - } | 89 | + $log.error('message is not valid JSON', msgEvent); |
54 | - f(ev); | 90 | + } |
55 | - }; | ||
56 | } | 91 | } |
57 | 92 | ||
58 | - function fnClose(f) { | 93 | + // Dispatches the message to the appropriate handler. |
59 | - // wrap the onClose function; we will handle any parameters to the | 94 | + function dispatchToHandler(event) { |
60 | - // close event here... | 95 | + var handler = handlers[event.event]; |
61 | - if (!fs.isF(f)) { | 96 | + if (handler) { |
62 | - return null; | 97 | + handler(event.payload); |
98 | + } else { | ||
99 | + $log.warn('unhandled event:', event); | ||
63 | } | 100 | } |
101 | + } | ||
102 | + | ||
103 | + function handleOpen() { | ||
104 | + $log.info('web socket open'); | ||
105 | + // FIXME: implement calling external hooks | ||
106 | + } | ||
64 | 107 | ||
65 | - return function (closeEvent) { | 108 | + function handleClose() { |
66 | - // NOTE: only seen {reason == ""} so far, nevertheless... | 109 | + $log.info('web socket closed'); |
67 | - f(closeEvent.reason); | 110 | + // FIXME: implement reconnect logic |
68 | - }; | ||
69 | } | 111 | } |
70 | 112 | ||
71 | angular.module('onosRemote') | 113 | angular.module('onosRemote') |
72 | .factory('WebSocketService', | 114 | .factory('WebSocketService', |
73 | ['$log', '$location', 'UrlFnService', 'FnService', | 115 | ['$log', '$location', 'UrlFnService', 'FnService', |
74 | 116 | ||
75 | - function ($log, $loc, ufs, _fs_) { | 117 | + function (_$log_, $loc, ufs, _fs_) { |
76 | fs = _fs_; | 118 | fs = _fs_; |
119 | + $log = _$log_; | ||
77 | 120 | ||
78 | - // creates a web socket for the given path, returning a "handle". | 121 | + // Creates a web socket for the given path, returning a "handle". |
79 | // opts contains the event handler callbacks, etc. | 122 | // opts contains the event handler callbacks, etc. |
80 | function createWebSocket(path, opts) { | 123 | function createWebSocket(path, opts) { |
81 | var o = opts || {}, | 124 | var o = opts || {}, |
... | @@ -85,8 +128,7 @@ | ... | @@ -85,8 +128,7 @@ |
85 | meta: { path: fullUrl, ws: null }, | 128 | meta: { path: fullUrl, ws: null }, |
86 | send: send, | 129 | send: send, |
87 | close: close | 130 | close: close |
88 | - }, | 131 | + }; |
89 | - ws; | ||
90 | 132 | ||
91 | try { | 133 | try { |
92 | ws = new WebSocket(fullUrl); | 134 | ws = new WebSocket(fullUrl); |
... | @@ -97,23 +139,21 @@ | ... | @@ -97,23 +139,21 @@ |
97 | $log.debug('Attempting to open websocket to: ' + fullUrl); | 139 | $log.debug('Attempting to open websocket to: ' + fullUrl); |
98 | 140 | ||
99 | if (ws) { | 141 | if (ws) { |
100 | - ws.onopen = fnOpen(o.onOpen); | 142 | + ws.onopen = handleOpen; |
101 | - ws.onmessage = fnMessage(o.onMessage); | 143 | + ws.onmessage = handleMessage; |
102 | - ws.onclose = fnClose(o.onClose); | 144 | + ws.onclose = handleClose; |
103 | } | 145 | } |
104 | 146 | ||
105 | - // messages are expected to be event objects.. | 147 | + // Sends a formulated event message via the backing web-socket. |
106 | function send(ev) { | 148 | function send(ev) { |
107 | - if (ev) { | 149 | + if (ev && ws) { |
108 | - if (ws) { | 150 | + ws.send(JSON.stringify(ev)); |
109 | - ws.send(JSON.stringify(ev)); | 151 | + } else if (!ws) { |
110 | - } else { | 152 | + $log.warn('ws.send() no web socket open!', fullUrl, ev); |
111 | - $log.warn('ws.send() no web socket open!', | ||
112 | - fullUrl, ev); | ||
113 | - } | ||
114 | } | 153 | } |
115 | } | 154 | } |
116 | 155 | ||
156 | + // Closes the backing web-socket. | ||
117 | function close() { | 157 | function close() { |
118 | if (ws) { | 158 | if (ws) { |
119 | ws.close(); | 159 | ws.close(); |
... | @@ -122,11 +162,16 @@ | ... | @@ -122,11 +162,16 @@ |
122 | } | 162 | } |
123 | } | 163 | } |
124 | 164 | ||
165 | + sws = api; // Make the shared web-socket accessible | ||
125 | return api; | 166 | return api; |
126 | } | 167 | } |
127 | 168 | ||
128 | return { | 169 | return { |
129 | - createWebSocket: createWebSocket | 170 | + resetSid: resetSid, |
171 | + createWebSocket: createWebSocket, | ||
172 | + bindHandlers: bindHandlers, | ||
173 | + unbindHandlers: unbindHandlers, | ||
174 | + sendEvent: sendEvent | ||
130 | }; | 175 | }; |
131 | }]); | 176 | }]); |
132 | 177 | ... | ... |
... | @@ -263,7 +263,7 @@ | ... | @@ -263,7 +263,7 @@ |
263 | // Cleanup on destroyed scope.. | 263 | // Cleanup on destroyed scope.. |
264 | $scope.$on('$destroy', function () { | 264 | $scope.$on('$destroy', function () { |
265 | $log.log('OvTopoCtrl is saying Buh-Bye!'); | 265 | $log.log('OvTopoCtrl is saying Buh-Bye!'); |
266 | - tes.closeSock(); | 266 | + tes.stop(); |
267 | tps.destroyPanels(); | 267 | tps.destroyPanels(); |
268 | tis.destroyInst(); | 268 | tis.destroyInst(); |
269 | tfs.destroyForce(); | 269 | tfs.destroyForce(); |
... | @@ -291,7 +291,7 @@ | ... | @@ -291,7 +291,7 @@ |
291 | tfs.initForce(svg, forceG, uplink, dim); | 291 | tfs.initForce(svg, forceG, uplink, dim); |
292 | tis.initInst({ showMastership: tfs.showMastership }); | 292 | tis.initInst({ showMastership: tfs.showMastership }); |
293 | tps.initPanels({ sendEvent: tes.sendEvent }); | 293 | tps.initPanels({ sendEvent: tes.sendEvent }); |
294 | - tes.openSock(); | 294 | + tes.start(); |
295 | 295 | ||
296 | $log.log('OvTopoCtrl has been created'); | 296 | $log.log('OvTopoCtrl has been created'); |
297 | }]); | 297 | }]); | ... | ... |
... | @@ -27,15 +27,15 @@ | ... | @@ -27,15 +27,15 @@ |
27 | 'use strict'; | 27 | 'use strict'; |
28 | 28 | ||
29 | // injected refs | 29 | // injected refs |
30 | - var $log, wss, wes, vs, tps, tis, tfs, tss, tts; | 30 | + var $log, vs, wss, tps, tis, tfs, tss, tts; |
31 | 31 | ||
32 | // internal state | 32 | // internal state |
33 | - var wsock, evApis; | 33 | + var handlers; |
34 | 34 | ||
35 | // ========================== | 35 | // ========================== |
36 | 36 | ||
37 | - function bindApis() { | 37 | + function createHandlers() { |
38 | - evApis = { | 38 | + handlers = { |
39 | showSummary: tps, | 39 | showSummary: tps, |
40 | 40 | ||
41 | showDetails: tss, | 41 | showDetails: tss, |
... | @@ -58,103 +58,43 @@ | ... | @@ -58,103 +58,43 @@ |
58 | }; | 58 | }; |
59 | } | 59 | } |
60 | 60 | ||
61 | - var nilApi = {}, | 61 | + var nilApi = {}; |
62 | - dispatcher = { | ||
63 | - handleEvent: function (ev) { | ||
64 | - var eid = ev.event, | ||
65 | - api = evApis[eid] || nilApi, | ||
66 | - eh = api[eid]; | ||
67 | - | ||
68 | - if (eh) { | ||
69 | - $log.debug(' << *Rx* ', eid, ev.payload); | ||
70 | - eh(ev.payload); | ||
71 | - } else { | ||
72 | - $log.warn('Unknown event (ignored):', ev); | ||
73 | - } | ||
74 | - }, | ||
75 | - | ||
76 | - sendEvent: function (evType, payload) { | ||
77 | - if (wsock) { | ||
78 | - $log.debug(' *Tx* >> ', evType, payload); | ||
79 | - wes.sendEvent(wsock, evType, payload); | ||
80 | - } else { | ||
81 | - $log.warn('sendEvent: no websocket open:', evType, payload); | ||
82 | - } | ||
83 | - } | ||
84 | - }; | ||
85 | - | ||
86 | - // === Web Socket functions === | ||
87 | - | ||
88 | - function onWsOpen() { | ||
89 | - $log.debug('web socket opened...'); | ||
90 | - // start by requesting periodic summary data... | ||
91 | - dispatcher.sendEvent('requestSummary'); | ||
92 | - vs.hide(); | ||
93 | - } | ||
94 | - | ||
95 | - function onWsMessage(ev) { | ||
96 | - dispatcher.handleEvent(ev); | ||
97 | - } | ||
98 | - | ||
99 | - function onWsClose(reason) { | ||
100 | - $log.log('web socket closed; reason=', reason); | ||
101 | - wsock = null; | ||
102 | - vs.lostServer('OvTopoCtrl', [ | ||
103 | - 'Oops!', | ||
104 | - 'Web-socket connection to server closed...', | ||
105 | - 'Try refreshing the page.' | ||
106 | - ]); | ||
107 | - } | ||
108 | - | ||
109 | - // ========================== | ||
110 | 62 | ||
111 | angular.module('ovTopo') | 63 | angular.module('ovTopo') |
112 | .factory('TopoEventService', | 64 | .factory('TopoEventService', |
113 | - ['$log', '$location', 'WebSocketService', 'WsEventService', 'VeilService', | 65 | + ['$log', '$location', 'VeilService', 'WebSocketService', |
114 | 'TopoPanelService', 'TopoInstService', 'TopoForceService', | 66 | 'TopoPanelService', 'TopoInstService', 'TopoForceService', |
115 | 'TopoSelectService', 'TopoTrafficService', | 67 | 'TopoSelectService', 'TopoTrafficService', |
116 | 68 | ||
117 | - function (_$log_, $loc, _wss_, _wes_, _vs_, | 69 | + function (_$log_, $loc, _vs_, _wss_, _tps_, _tis_, _tfs_, _tss_, _tts_) { |
118 | - _tps_, _tis_, _tfs_, _tss_, _tts_) { | ||
119 | $log = _$log_; | 70 | $log = _$log_; |
120 | - wss = _wss_; | ||
121 | - wes = _wes_; | ||
122 | vs = _vs_; | 71 | vs = _vs_; |
72 | + wss = _wss_; | ||
123 | tps = _tps_; | 73 | tps = _tps_; |
124 | tis = _tis_; | 74 | tis = _tis_; |
125 | tfs = _tfs_; | 75 | tfs = _tfs_; |
126 | tss = _tss_; | 76 | tss = _tss_; |
127 | tts = _tts_; | 77 | tts = _tts_; |
128 | 78 | ||
129 | - bindApis(); | 79 | + createHandlers(); |
130 | - | ||
131 | - // TODO: handle "guiSuccessor" functionality (replace host) | ||
132 | - // TODO: implement retry on close functionality | ||
133 | 80 | ||
134 | - function openSock() { | 81 | + // FIXME: need to handle async socket open to avoid race |
135 | - wsock = wss.createWebSocket('topology', { | 82 | + function start() { |
136 | - onOpen: onWsOpen, | 83 | + wss.bindHandlers(handlers); |
137 | - onMessage: onWsMessage, | 84 | + wss.sendEvent('topoStart'); |
138 | - onClose: onWsClose, | 85 | + $log.debug('topo comms started'); |
139 | - wsport: $loc.search().wsport | ||
140 | - }); | ||
141 | - $log.debug('web socket opened:', wsock); | ||
142 | } | 86 | } |
143 | 87 | ||
144 | - function closeSock() { | 88 | + function stop() { |
145 | - var path; | 89 | + wss.unbindHandlers(); |
146 | - if (wsock) { | 90 | + wss.sendEvent('topoStop'); |
147 | - path = wsock.meta.path; | 91 | + $log.debug('topo comms stopped'); |
148 | - wsock.close(); | ||
149 | - wsock = null; | ||
150 | - $log.debug('web socket closed. path:', path); | ||
151 | - } | ||
152 | } | 92 | } |
153 | 93 | ||
154 | return { | 94 | return { |
155 | - openSock: openSock, | 95 | + start: start, |
156 | - closeSock: closeSock, | 96 | + stop: stop, |
157 | - sendEvent: dispatcher.sendEvent | 97 | + sendEvent: wss.sendEvent |
158 | }; | 98 | }; |
159 | }]); | 99 | }]); |
160 | }()); | 100 | }()); | ... | ... |
... | @@ -64,10 +64,10 @@ | ... | @@ -64,10 +64,10 @@ |
64 | .controller('OnosCtrl', [ | 64 | .controller('OnosCtrl', [ |
65 | '$log', '$route', '$routeParams', '$location', | 65 | '$log', '$route', '$routeParams', '$location', |
66 | 'KeyService', 'ThemeService', 'GlyphService', 'PanelService', | 66 | 'KeyService', 'ThemeService', 'GlyphService', 'PanelService', |
67 | - 'FlashService', 'QuickHelpService', | 67 | + 'FlashService', 'QuickHelpService', 'WebSocketService', |
68 | 68 | ||
69 | function ($log, $route, $routeParams, $location, | 69 | function ($log, $route, $routeParams, $location, |
70 | - ks, ts, gs, ps, flash, qhs) { | 70 | + ks, ts, gs, ps, flash, qhs, wss) { |
71 | var self = this; | 71 | var self = this; |
72 | 72 | ||
73 | self.$route = $route; | 73 | self.$route = $route; |
... | @@ -84,6 +84,13 @@ | ... | @@ -84,6 +84,13 @@ |
84 | flash.initFlash(); | 84 | flash.initFlash(); |
85 | qhs.initQuickHelp(); | 85 | qhs.initQuickHelp(); |
86 | 86 | ||
87 | + // TODO: register handlers for initial messages: instances, settings, etc. | ||
88 | + | ||
89 | + // TODO: opts? | ||
90 | + wss.createWebSocket('core', { | ||
91 | + wsport: $location.search().wsport | ||
92 | + }); | ||
93 | + | ||
87 | $log.log('OnosCtrl has been created'); | 94 | $log.log('OnosCtrl has been created'); |
88 | 95 | ||
89 | $log.debug('route: ', self.$route); | 96 | $log.debug('route: ', self.$route); | ... | ... |
-
Please register or login to post a comment