From 85476d9915f23fc45e64b5242e804623f50cd20a Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Mon, 31 Oct 2016 05:30:32 -0700 Subject: clean up mitmweb --- web/src/js/backends/websocket.js | 68 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 web/src/js/backends/websocket.js (limited to 'web/src/js/backends/websocket.js') diff --git a/web/src/js/backends/websocket.js b/web/src/js/backends/websocket.js new file mode 100644 index 00000000..aa890bb7 --- /dev/null +++ b/web/src/js/backends/websocket.js @@ -0,0 +1,68 @@ +import { fetchApi } from "../utils" + +export const CMD_RESET = 'reset' + +export default class WebsocketBackend { + constructor(store) { + this.activeFetches = {} + this.store = store + this.connect() + } + + connect() { + this.socket = new WebSocket(location.origin.replace('http', 'ws') + '/updates') + this.socket.addEventListener('open', () => this.onOpen()) + this.socket.addEventListener('close', () => this.onClose()) + this.socket.addEventListener('message', msg => this.onMessage(JSON.parse(msg.data))) + this.socket.addEventListener('error', error => this.onError(error)) + } + + onOpen() { + this.fetchData("settings") + this.fetchData("flows") + this.fetchData("events") + } + + fetchData(resource) { + let queue = [] + this.activeFetches[resource] = queue + fetchApi(`/${resource}`) + .then(res => res.json()) + .then(json => { + // Make sure that we are not superseded yet by the server sending a RESET. + if (this.activeFetches[resource] === queue) + this.receive(resource, json) + }) + } + + onMessage(msg) { + + if (msg.cmd === CMD_RESET) { + return this.fetchData(msg.resource) + } + if (msg.resource in this.activeFetches) { + this.activeFetches[msg.resource].push(msg) + } else { + let type = `${msg.resource}_${msg.cmd}`.toUpperCase() + this.store.dispatch({ type, ...msg }) + } + } + + receive(resource, msg) { + let type = `${resource}_RECEIVE`.toUpperCase() + this.store.dispatch({ type, [resource]: msg }) + let queue = this.activeFetches[resource] + delete this.activeFetches[resource] + queue.forEach(msg => this.onMessage(msg)) + } + + onClose() { + // FIXME + console.error("onClose", arguments) + } + + onError() { + // FIXME + console.error("onError", arguments) + } +} -- cgit v1.2.3 From c2a130dcedcb69c35d8bb7432fa65e6542e6de19 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Tue, 1 Nov 2016 00:04:05 +0100 Subject: web: simplify flow storage --- web/src/js/backends/websocket.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'web/src/js/backends/websocket.js') diff --git a/web/src/js/backends/websocket.js b/web/src/js/backends/websocket.js index aa890bb7..40dde0d7 100644 --- a/web/src/js/backends/websocket.js +++ b/web/src/js/backends/websocket.js @@ -48,9 +48,9 @@ export default class WebsocketBackend { } } - receive(resource, msg) { + receive(resource, data) { let type = `${resource}_RECEIVE`.toUpperCase() - this.store.dispatch({ type, [resource]: msg }) + this.store.dispatch({ type, cmd: "receive", resource, data }) let queue = this.activeFetches[resource] delete this.activeFetches[resource] queue.forEach(msg => this.onMessage(msg)) -- cgit v1.2.3 From 77f05178ad23a8bb1f2cc43e1cdcf0593acd43d2 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Wed, 9 Nov 2016 13:01:25 +0100 Subject: mitmweb: minor fixes --- web/src/js/backends/websocket.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'web/src/js/backends/websocket.js') diff --git a/web/src/js/backends/websocket.js b/web/src/js/backends/websocket.js index 40dde0d7..44b260c9 100644 --- a/web/src/js/backends/websocket.js +++ b/web/src/js/backends/websocket.js @@ -1,6 +1,11 @@ +/** + * The WebSocket backend is responsible for updating our knowledge of flows and events + * from the REST API and live updates delivered via a WebSocket connection. + * An alternative backend may use the REST API only to host static instances. + */ import { fetchApi } from "../utils" -export const CMD_RESET = 'reset' +const CMD_RESET = 'reset' export default class WebsocketBackend { constructor(store) { -- cgit v1.2.3