wifictld-analyzer/webroot/js/store.js

99 lines
2.3 KiB
JavaScript
Raw Normal View History

2019-03-01 10:54:19 +01:00
function newUUID () {
/* eslint-disable */
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = Math.random() * 16 | 0,
v = c === 'x' ? r : r & 0x3 | 0x8;
return v.toString(16);
});
/* eslint-enable */
}
const store = new Vuex.Store({
state: {
socket: {
_session: localStorage.getItem('session'),
isConnected: false,
reconnectError: false,
eventMSGID: {},
eventTo: {},
}
},
mutations:{
SOCKET_ONOPEN (state, event) {
state.socket.isConnected = true
},
SOCKET_ONCLOSE (state, event) {
state.socket.isConnected = false
},
SOCKET_ONERROR (state, event) {
console.error(state, event)
},
// default handler called for all methods
SOCKET_ONMESSAGE (state, msg) {
if (msg.subject === 'session_init') {
if (state.socket._session === null) {
state.socket._session = newUUID();
localStorage.setItem('session', state.socket._session);
}
msg.id = state.socket._session;
Vue.prototype.$socket.sendObj(msg);
return;
}
const msgFunc = eventMSGID[msg.id];
if (msgFunc) {
msgFunc(msg);
delete eventMSGID[msg.id];
return;
}
const eventFuncs = eventTo[msg.subject];
if (typeof eventFuncs === 'object' && eventFuncs.length > 0) {
for (const key in eventFuncs) {
const func = eventFuncs[key];
if (func) {
func(msg);
}
}
return;
}
console.log(`unable to identify message: ${msg.subject}`);
},
// mutations for reconnect methods
SOCKET_RECONNECT(state, count) {
console.info(state, count)
},
SOCKET_RECONNECT_ERROR(state) {
state.socket.reconnectError = true;
},
setEvent (state, to, func) {
state.socket.eventTo[to] = [func];
},
addEvent (state, to, func) {
if (typeof state.socket.eventTo[to] !== 'object') {
state.socket.eventTo[to] = [];
}
state.socket.eventTo[to].push(func);
},
delEvent (state, to, func) {
if (typeof state.socket.eventTo[to] === 'object' && eventTo[to].length > 1) {
state.socket.eventTo[to].pop(func);
} else {
state.socket.eventTo[to] = [];
}
},
call (state, msg, callback) {
if (!msg.id) {
msg.id = newUUID();
}
const ret = Vue.prototype.$socket.sendObj(msg);
if (typeof callback === 'function') {
state.socket.eventMSGID[msg.id] = callback;
}
return ret;
}
}
})