import { RESULT_CODE_ERROR, RESULT_CODE_SUCCESS, } from '@/constants/result-constants'; import { OptionsType, WS } from '@/plugins/ws-websocket'; import { computed, onBeforeUnmount, onMounted, reactive, ref } from 'vue'; import { ueEventData, ueEventId, ueEventTotal } from './useUEEvent'; /**websocket连接 */ export default function useWS() { const ws = new WS(); /**发消息 */ function wsSend(data: Record) { ws.send(data); } /**接收数据后回调 */ function wsMessage(res: Record) { console.log(res); const { code, requestId, groupId, data } = res; if (code === RESULT_CODE_ERROR) { console.warn(res.msg); return; } // 普通信息 switch (requestId) { // ueEvent UE会话事件 case '1010': if (Array.isArray(data.rows)) { ueEventTotal.value = data.total; const evDataArr: Record[] = []; for (const item of data.rows) { const v = ueEventParse(item); if (v) { evDataArr.push(v); } } ueEventData.value = evDataArr; if (evDataArr.length > 0) { ueEventId.value = evDataArr[0].id; } } break; } // 订阅组信息 switch (groupId) { // ueEvent UE会话事件 case '1010': if (data.data) { const v = ueEventParse(data.data); if (v) { ueEventData.value.unshift(v); ueEventId.value = v.id; } } break; } } function wsInitData() { ws.send({ requestId: '1010', type: 'ue', data: { neType: 'AMF', neId: '001', sortField: 'timestamp', sortOrder: 'desc', pageNum: 1, pageSize: 50, }, }); } /**ueEvent UE会话事件 数据解析 */ function ueEventParse(item: Record) { let evData: Record = {}; try { evData = JSON.parse(item.eventJSON); } catch (error) { console.error(error); return false; } if (Reflect.has(evData, 'authTime')) { return { id: item.id, type: item.eventType, time: evData.authTime, imsi: evData.imsi, msg: `${evData.authMessage}`, }; } if (Reflect.has(evData, 'detachTime')) { return { id: item.id, type: item.eventType, time: evData.detachTime, imsi: evData.imsi, msg: `${evData.detachResult}`, }; } if (Reflect.has(evData, 'changeTime')) { return { id: item.id, type: item.eventType, time: evData.changeTime, imsi: evData.imsi, msg: `${evData.onlineNumber}`, }; } } /**接收数据后回调 */ function wsError(ev: any) { // 接收数据后回调 console.log(ev); } onMounted(() => { const options: OptionsType = { url: '/ws', params: { /**订阅通道组 * * UE会话事件-AMF (GroupID:1010) */ subGroupID: '1010', }, onmessage: wsMessage, onerror: wsError, }; ws.connect(options); }); onBeforeUnmount(() => { ws.close(); }); return { wsInitData, wsSend, }; }