149 lines
3.2 KiB
TypeScript
149 lines
3.2 KiB
TypeScript
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<string, any>) {
|
|
ws.send(data);
|
|
}
|
|
|
|
/**接收数据后回调 */
|
|
function wsMessage(res: Record<string, any>) {
|
|
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<string, any>[] = [];
|
|
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<string, any>) {
|
|
let evData: Record<string, any> = {};
|
|
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,
|
|
};
|
|
}
|