diff --git a/src/containers/app.js b/src/containers/app.js index 34c7b07..61f4d16 100644 --- a/src/containers/app.js +++ b/src/containers/app.js @@ -108,6 +108,8 @@ class App extends Component { localStorage.setItem('token', ''); this.props.router.push('/login'); + + return; } // open connection to each required simulator diff --git a/src/data-managers/simulator-data-data-manager.js b/src/data-managers/simulator-data-data-manager.js index 35c9a17..57dc126 100644 --- a/src/data-managers/simulator-data-data-manager.js +++ b/src/data-managers/simulator-data-data-manager.js @@ -34,6 +34,16 @@ class SimulatorDataDataManager { } } + 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]; + } + } + } + onOpen(event, identifier, signals, firstOpen) { AppDispatcher.dispatch({ type: 'simulatorData/opened', @@ -46,11 +56,12 @@ class SimulatorDataDataManager { onClose(event, identifier) { AppDispatcher.dispatch({ type: 'simulatorData/closed', - identifier: identifier + identifier: identifier, + notification: (event.code !== 4000) }); // remove from list, keep null reference for flag detection - this._sockets[identifier] = null; + delete this._sockets[identifier]; } onMessage(event, identifier) { diff --git a/src/stores/simulator-data-store.js b/src/stores/simulator-data-store.js index 0f95fa2..741c339 100644 --- a/src/stores/simulator-data-store.js +++ b/src/stores/simulator-data-store.js @@ -62,7 +62,7 @@ class SimulationDataStore extends ReduceStore { // explicit call to prevent array copy this.__emitChange(); } else { - console.log('same sequence'); + console.log('same sequence ' + state[action.identifier].sequence + ' ' + action.data.sequence); } return state; diff --git a/src/stores/simulator-store.js b/src/stores/simulator-store.js index a1ec187..69303b3 100644 --- a/src/stores/simulator-store.js +++ b/src/stores/simulator-store.js @@ -74,14 +74,16 @@ class SimulatorStore extends ArrayStore { // update running state simulator.running = false; - NotificationsDataManager.addNotification({ - title: 'Simulator offline', - message: 'Simulator \'' + simulator.name + '\' went offline.', - level: 'info' - }); + if (action.notification) { + NotificationsDataManager.addNotification({ + title: 'Simulator offline', + message: 'Simulator \'' + simulator.name + '\' went offline.', + level: 'info' + }); - // restart requesting again - SimulatorsDataManager.startRunningDetection(simulator); + // restart requesting again + SimulatorsDataManager.startRunningDetection(simulator); + } return this.updateElements(state, [ simulator ]); diff --git a/src/stores/user-store.js b/src/stores/user-store.js index a0765f7..c3467d2 100644 --- a/src/stores/user-store.js +++ b/src/stores/user-store.js @@ -12,6 +12,7 @@ import { ReduceStore } from 'flux/utils'; import AppDispatcher from '../app-dispatcher'; import UsersDataManager from '../data-managers/users-data-manager'; import NotificationsDataManager from '../data-managers/notifications-data-manager'; +import SimulatorDataDataManager from '../data-managers/simulator-data-data-manager'; class UserStore extends ReduceStore { constructor() { @@ -33,6 +34,9 @@ class UserStore extends ReduceStore { return state; case 'users/logout': + // disconnect from all simulators + SimulatorDataDataManager.closeAll(); + // delete user and token return Object.assign({}, state, { token: null });