diff --git a/src/data-managers/simulator-data-data-manager.js b/src/data-managers/simulator-data-data-manager.js index 29e36c0..518d69b 100644 --- a/src/data-managers/simulator-data-data-manager.js +++ b/src/data-managers/simulator-data-data-manager.js @@ -32,24 +32,27 @@ class SimulatorDataDataManager { open(endpoint, identifier) { // pass signals to onOpen callback - if (this._sockets[identifier] != null) { - if (this._sockets[identifier].url !== WebsocketAPI.getURL(endpoint)) { - // replace connection, since endpoint changed - this._sockets.close(); + if (this._sockets[identifier] != null) + return; // already open? - this._sockets[identifier] = new WebsocketAPI(endpoint, { onOpen: (event) => this.onOpen(event, identifier), onClose: (event) => this.onClose(event, identifier), onMessage: (event) => this.onMessage(event, identifier), onError: (error) => this.onError(error, identifier) }); + this._sockets[identifier] = new WebsocketAPI(endpoint, { onOpen: (event) => this.onOpen(event, identifier, true), onClose: (event) => this.onClose(event, identifier), onMessage: (event) => this.onMessage(event, identifier), onError: (error) => this.onError(error, identifier) }); + } + + update(endpoint, identifier) { + if (this._sockets[identifier] != null) { + if (this._sockets[identifier].endpoint !== endpoint) { + this._sockets[identifier].close(); + this._sockets[identifier] = new WebsocketAPI(endpoint, { onOpen: (event) => this.onOpen(event, identifier, false), onClose: (event) => this.onClose(event, identifier), onMessage: (event) => this.onMessage(event, identifier), onError: (error) => this.onError(error, identifier) }); } - } else { - this._sockets[identifier] = new WebsocketAPI(endpoint, { onOpen: (event) => this.onOpen(event, identifier, false), onClose: (event) => this.onClose(event, identifier), onMessage: (event) => this.onMessage(event, identifier), onError: (error) => this.onError(error, identifier) }); } } closeAll() { // close every open socket - for (var key in this._sockets) { - if (this._sockets.hasOwnProperty(key)) { - this._sockets[key].close(4000); - delete this._sockets[key]; + for (var identifier in this._sockets) { + if (this._sockets.hasOwnProperty(identifier)) { + this._sockets[identifier].close(4000); + delete this._sockets[identifier]; } } } diff --git a/src/stores/simulator-store.js b/src/stores/simulator-store.js index 8406944..2bd4410 100644 --- a/src/stores/simulator-store.js +++ b/src/stores/simulator-store.js @@ -48,6 +48,14 @@ class SimulatorStore extends ArrayStore { return super.reduce(state, action); case 'simulators/edited': + // connect to each simulator + const simulator = action.data; + const endpoint = _.get(simulator, 'properties.endpoint') || _.get(simulator, 'rawProperties.endpoint'); + + if (endpoint != null && endpoint !== '') { + SimulatorDataDataManager.update(endpoint, simulator._id); + } + return super.reduce(state, action); case 'simulators/fetched':