|
|
|
@ -0,0 +1,127 @@
|
|
|
|
|
import { ElMessage } from '@/plugins/element-plus';
|
|
|
|
|
import { UUID } from '@/utils/chat';
|
|
|
|
|
|
|
|
|
|
const state = () => ({
|
|
|
|
|
socket: null,
|
|
|
|
|
heart: null,
|
|
|
|
|
queue: [],
|
|
|
|
|
task: [],
|
|
|
|
|
sessionData: {},
|
|
|
|
|
});
|
|
|
|
|
const getters = {};
|
|
|
|
|
const mutations = {
|
|
|
|
|
setSocket: (state, data) => (state.socket = data),
|
|
|
|
|
setHeart: (state, data) => (state.heart = data),
|
|
|
|
|
setTask: (state, data) => (state.task = data),
|
|
|
|
|
addTask: (state, data) => state.task.push(data),
|
|
|
|
|
delTask: (state, data) => state.task.splice(data, 1),
|
|
|
|
|
receive: (state, { code, traceType, content }) => {
|
|
|
|
|
if (code === 200) {
|
|
|
|
|
switch (traceType) {
|
|
|
|
|
case 27:
|
|
|
|
|
state.sessionData = content;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
const actions = {
|
|
|
|
|
/**
|
|
|
|
|
* 创建连接
|
|
|
|
|
*/
|
|
|
|
|
connect: ({ state, commit, dispatch }, token) => {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
if (window.WebSocket) {
|
|
|
|
|
const socket = new WebSocket('ws://192.168.10.93:8090/ws?client=' + token);
|
|
|
|
|
socket.onmessage = ({ data }) => {
|
|
|
|
|
data = JSON.parse(data);
|
|
|
|
|
if (data.traceType !== 0) {
|
|
|
|
|
let index = state.task.findIndex((item) => item.traceId === data.traceId);
|
|
|
|
|
if (index !== -1) {
|
|
|
|
|
commit('delTask', index);
|
|
|
|
|
commit('receive', data);
|
|
|
|
|
console.info('[chat] msg', data);
|
|
|
|
|
} else {
|
|
|
|
|
console.info('[chat] deprecated', data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
socket.onopen = () => {
|
|
|
|
|
commit(
|
|
|
|
|
'setHeart',
|
|
|
|
|
setInterval(() => {
|
|
|
|
|
dispatch('heart');
|
|
|
|
|
}, 3000)
|
|
|
|
|
);
|
|
|
|
|
console.info('[chat] open');
|
|
|
|
|
resolve(socket);
|
|
|
|
|
};
|
|
|
|
|
socket.onclose = () => {
|
|
|
|
|
clearInterval(state.heart);
|
|
|
|
|
console.info('[chat] close');
|
|
|
|
|
};
|
|
|
|
|
socket.onerror = (e) => {
|
|
|
|
|
clearInterval(state.heart);
|
|
|
|
|
console.info('[chat] error', e);
|
|
|
|
|
reject(e);
|
|
|
|
|
};
|
|
|
|
|
commit('setSocket', socket);
|
|
|
|
|
} else {
|
|
|
|
|
ElMessage.error('当前浏览器不支持 WebSocket');
|
|
|
|
|
reject('not support websocket');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 发送心跳,任务监测
|
|
|
|
|
*/
|
|
|
|
|
heart: ({ state, dispatch }) => {
|
|
|
|
|
dispatch('send', {
|
|
|
|
|
traceType: 26,
|
|
|
|
|
content: { storeId: 1 },
|
|
|
|
|
});
|
|
|
|
|
console.info('[chat] heart');
|
|
|
|
|
state.task.forEach((item) => {
|
|
|
|
|
dispatch('send', item);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 执行任务
|
|
|
|
|
*/
|
|
|
|
|
invoke: ({ commit, dispatch }, data) => {
|
|
|
|
|
data.traceId = UUID();
|
|
|
|
|
commit('addTask', data);
|
|
|
|
|
dispatch('send', data);
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 发送数据
|
|
|
|
|
*/
|
|
|
|
|
send: ({ state }, data) => {
|
|
|
|
|
if (window.WebSocket) {
|
|
|
|
|
if (state.socket?.readyState === WebSocket.OPEN) {
|
|
|
|
|
data.traceId = data.traceId || UUID();
|
|
|
|
|
state.socket.send(JSON.stringify(data));
|
|
|
|
|
if (data.traceType !== 26) {
|
|
|
|
|
console.info('[chat] send', data);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 查询回话列表
|
|
|
|
|
*/
|
|
|
|
|
querySession: ({ dispatch }) => {
|
|
|
|
|
dispatch('invoke', {
|
|
|
|
|
traceType: 27,
|
|
|
|
|
content: { storeId: 1 },
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
export default {
|
|
|
|
|
state,
|
|
|
|
|
getters,
|
|
|
|
|
mutations,
|
|
|
|
|
actions,
|
|
|
|
|
};
|