rax-medical/src/stores/remote-ws-store.ts

449 lines
18 KiB
TypeScript
Raw Normal View History

import { Session } from "@/utils/storage";
import { defineStore } from "pinia";
2024-04-23 09:42:25 +08:00
const vitalUrl = "ws://" + window.location.host + "/socket.io/admin/rax/vitalSignsMedicine?token=" + Session.getToken()
const medicineUrl = "ws://" + window.location.host + "/socket.io/admin/rax/addMedicine?token=" + Session.getToken()
const chatUrl = "ws://" + window.location.host + "/socket.io/admin/rax/chatRoom?token=" + Session.getToken()
2024-04-23 09:42:25 +08:00
export const useRemoteWsStore = defineStore("remoteWs", {
state: () => {
return {
patient: {} as any,
remoteTasks: [] as any,
remoteTasksCap: 10,
currentTaskIndex: 0,
varMedicine: ["丙泊酚", "舒芬太尼", "瑞芬太尼", "顺阿曲库胺"],
fixedMedicine: ["尼卡地平", "艾司洛尔", "麻黄素", "阿托品"],
exceptionType: ["BIS_except", "DBP_except", "EtCO2_except", "HR_except", "SBP_except", "ST_except"],
exceptionMsg: {
"BIS_except": "脑电双频指数异常", "DBP_except": "舒张压异常", "EtCO2_except": "呼气末二氧化碳异常",
"HR_except": "心率异常", "SBP_except": "收缩压异常", "ST_except": "ST异常"
} as any,
exceptions: {} as any,
closeStatus: {} as any
}
},
actions: {
setCurrentTaskIndex(i: number) {
this.currentTaskIndex = i
Session.set("currentTaskIndex", i)
},
getCurrentTaskIndex() {
if (Session.get("currentTaskIndex") && Session.get("currentTaskIndex") > -1) {
this.currentTaskIndex = Session.get("currentTaskIndex")
}
return this.currentTaskIndex
},
setExceptions(i: number, e: any) {
this.exceptions[i] = e
},
getExceptions() {
return this.exceptions
},
getCloseStatus() {
return this.closeStatus
},
setRemoteTask() {
Session.set("remoteTasks", this.remoteTasks)
},
getRemoteTask() {
if (Session.get("remoteTasks") && this.remoteTasks.length == 0) {
this.remoteTasks = Session.get("remoteTasks")
}
return this.remoteTasks
},
initRemoteTask() {
if (Session.get("remoteTasks")) {
this.remoteTasks = Session.get("remoteTasks")
}
if (this.remoteTasks.length <= 0) {
for (let i = 0; i < 10; i++) {
this.remoteTasks.push({
isRemote: false,
isException: false,
taskName: "",
server: "",
serverun: "",
serverps: "",
patient: "",
patientId: "",
date: "",
log: [],
index: i
})
}
}
return this.remoteTasks
},
resetRemoteTask(i: number) {
this.remoteTasks[i] = Object.assign(this.remoteTasks[i], {
isRemote: false,
isException: false,
taskName: "",
server: "",
serverun: "",
serverps: "",
patient: "",
patientId: "",
date: "",
log: [],
index: i,
message: []
})
Session.set("remoteTasks", this.remoteTasks)
},
getActiveRemoteTask() {
let index = 0
for (let i = 0; i < this.remoteTasks.length; i++) {
if (this.remoteTasks[i].isRemote) index = i
}
return index
},
setRemoteLog(log: any, i: number) {
this.remoteTasks[i].log.push(log)
},
2024-06-05 17:25:14 +08:00
disconnect(name: string, id: string, date: string, index: number) {
this.disconnectVital(name, id, date, index)
this.disconnectChat(name, id, date, index)
this.disconnectMedicine(name, id, date, index)
delete this.patient[name + id + date + index]
},
createVitalConnect(name: string, id: string, date: string, index: number) {
if (!this.patient[name + id + date + index]) this.patient[name + id + date + index] = {}
const patient = this.patient[name + id + date + index]
if (!patient['vitalWS']) {
patient['vitalWS'] = new WebSocket(vitalUrl)
patient.vitalWS.onopen = () => {
patient.vitalWS.send(JSON.stringify({
patientName: name,
idNum: id,
date: date,
msgType: "init"
}))
}
}
},
2024-06-05 17:25:14 +08:00
subscribeVital(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
2024-06-05 17:58:00 +08:00
if (patient && patient.vitalWS) {
patient.vitalWS.onmessage = (e: any) => {
if (e && e.data) {
const data = JSON.parse(e.data);
if (data.msgType == "msg") {
cb(e)
} else {
patient.vitalWS.send(JSON.stringify({msgType: "heartbeat"}))
}
}
}
} else {
cb({
status: 2,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
vitalOnclose(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
2024-06-05 17:58:00 +08:00
if (patient && patient.vitalWS) {
patient.vitalWS.onclose = () => {
const status = this.getCloseStatus()
if (!status[name + id + date + index + 'vitalWS']) {
delete patient.vitalWS
cb()
}
2024-06-05 17:25:14 +08:00
}
}
},
2024-06-05 17:25:14 +08:00
vitalOnerror(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
if (patient.vitalWS) {
patient.vitalWS.onerror = cb
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
unsubscribeVital(name: string, id: string, date: string, index: number) {
const patient: any = this.patient[name + id + date + index]
if (patient && patient.vitalWS) {
patient.vitalWS.onmessage = undefined
patient.vitalWS.onclose = undefined
patient.vitalWS.onerror = undefined
}
},
2024-06-05 17:25:14 +08:00
disconnectVital(name: string, id: string, date: string, index: number) {
const patient: any = this.patient[name + id + date + index]
if (patient && patient.vitalWS) {
2024-06-05 17:25:14 +08:00
this.closeStatus[name + id + date + index + 'vitalWS'] = true
patient.vitalWS.close()
delete patient['vitalWS']
2024-06-05 17:25:14 +08:00
delete this.closeStatus[name + id + date + index + 'vitalWS']
}
},
2024-06-05 17:25:14 +08:00
createChatConnect(name: string, id: string, date: string, index: number) {
if (!this.patient[name + id + date + index]) this.patient[name + id + date + index] = {}
const patient = this.patient[name + id + date + index]
if (!patient['chatWS']) {
patient['chatWS'] = new WebSocket(chatUrl)
patient.chatWS.onopen = function () {
patient.chatWS.send(JSON.stringify({
patientName: name,
idNum: id,
date: date,
2024-11-14 16:29:50 +08:00
msgType: "init"
}))
}
}
},
2024-06-05 17:25:14 +08:00
subscribeChat(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
if (patient.chatWS) {
patient.chatWS.onmessage = (e: any) => {
if (e && e.data) {
const data = JSON.parse(e.data);
if (data.msgType == "msg" || data.msgType == "audio") {
cb(e)
} else {
patient.chatWS.send(JSON.stringify({msgType: "heartbeat"}))
}
}
}
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
chatOnclose(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
patient.chatWS.onclose = () => {
const status = this.getCloseStatus()
if (!status[name + id + date + index + 'chatWS']) {
delete patient.chatWS
cb()
}
}
},
2024-06-05 17:25:14 +08:00
chatOnerror(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
if (patient.chatWS) {
patient.chatWS.onerror = cb
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
unsubscribeChat(name: string, id: string, date: string, index: number) {
const patient: any = this.patient[name + id + date + index]
if (patient && patient.chatWS) {
patient.chatWS.onmessage = undefined
patient.chatWS.onclose = undefined
patient.chatWS.onerror = undefined
}
},
2024-06-05 17:25:14 +08:00
sendMsg(name: string, id: string, date: string, msg: string, index: number, cb: any) {
const patient: any = this.patient[name + id + date + index]
if (patient) {
const params = {
2024-11-14 16:29:50 +08:00
msgType: "msg",
patientName: name,
idNum: id,
date: date,
2024-11-14 16:29:50 +08:00
content:msg
}
patient.chatWS.send(JSON.stringify(params))
cb({
status: 0
})
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
// 发送语音消息
sendAudio(name: string, id: string, date: string, audio: any, index: number, cb: any) {
const patient: any = this.patient[name + id + date + index]
if (patient) {
const params = {
patientName: name,
idNum: id,
date: date,
content: audio,
msgType: "audio"
}
patient.chatWS.send(JSON.stringify(params))
cb({
status: 0
})
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
disconnectChat(name: string, id: string, date: string, index: number) {
const patient: any = this.patient[name + id + date + index]
if (patient && patient.chatWS) {
2024-06-05 17:25:14 +08:00
this.closeStatus[name + id + date + index + 'chatWS'] = true
patient.chatWS.close()
delete patient['chatWS']
2024-06-05 17:25:14 +08:00
delete this.closeStatus[name + id + date + index + 'chatWS']
}
},
2024-06-05 17:25:14 +08:00
createMedicineConnect(name: string, id: string, date: string, index: number) {
if (!this.patient[name + id + date + index]) this.patient[name + id + date + index] = {}
const patient = this.patient[name + id + date + index]
if (!patient['medicineWS']) {
patient['medicineWS'] = new WebSocket(medicineUrl)
patient.medicineWS.onopen = function () {
patient.medicineWS.send(JSON.stringify({
patientName: name,
idNum: id,
date: date,
2024-07-26 13:52:20 +08:00
msgType: "init"
}))
2024-08-05 14:22:24 +08:00
if (this.loopSendMedicinePing) {
this.loopSendMedicinePing(name,id,date,index,()=>{})
}
}
}
},
// 请求连接远程控制
reqMedicineConnect(params:{name: string, id: string, date: string, index: number, msgType: string, flag: string},cb:any){
const {name, id, date, index,msgType,flag} = params;
const patient = this.patient[name + id + date+index]
const sendData={
patientName: name,
idNum: id,
date: date,
msgType: msgType,
webConnectionFlag: flag
}
if (patient) {
patient.medicineWS.send(JSON.stringify(sendData))
}
if (flag==='0') {
setTimeout(() => {
cb(flag)
}, 100);
}
},
2024-06-05 17:25:14 +08:00
subscribeMedicine(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
if (patient) {
patient.medicineWS.onmessage = (e: any) => {
if (e && e.data) {
const data = JSON.parse(e.data);
if (data.msgType==='msg') {
cb(e)
} else {
patient.medicineWS.send(JSON.stringify({msgType: "heartbeat"}))
}
// 抛出信息用于vue页面监听msgType: getMedicine
2024-09-29 16:39:16 +08:00
const shouldCallBackList=['pong','unityRequestConnection','unityResponseConnection',"getMedicine","connectionMsg"]
if (shouldCallBackList.includes(data.msgType)) {
cb(e)
}
}
}
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
loopSendMedicinePing(name: string, id: string, date: string, index: number, cb: any){
const patient = this.patient[name + id + date + index]
if (patient) {
2024-08-02 13:49:38 +08:00
patient.medicineWS.send(JSON.stringify({msgType: "ping",patientName: name,
idNum: id,
date: date,
2024-08-05 15:18:57 +08:00
msg: + new Date()}))
}
},
2024-06-05 17:25:14 +08:00
medicineOnclose(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
patient.medicineWS.onclose = () => {
const status = this.getCloseStatus()
if (!status[name + id + date + index + 'medicineWS']) {
delete patient.medicineWS
cb()
}
}
},
2024-06-05 17:25:14 +08:00
medicineOnerror(name: string, id: string, date: string, index: number, cb: any) {
const patient = this.patient[name + id + date + index]
if (patient.medicineWS) {
patient.medicineWS.onerror = cb
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
unsubscribeMedicine(name: string, id: string, date: string, index: number) {
const patient: any = this.patient[name + id + date + index]
if (patient && patient.medicineWS) {
patient.medicineWS.onmessage = undefined
patient.medicineWS.onclose = undefined
patient.medicineWS.onerror = undefined
}
},
sendMedicine(args: {
msgType: string,
name: string,
id: string,
date: string,
2024-06-05 17:25:14 +08:00
index: number,
flag: string,
medicine: string,
value: string
}, cb: any) {
2024-06-05 17:25:14 +08:00
const patient: any = this.patient[args.name + args.id + args.date + args.index]
if (patient) {
const params = {
msgType: args.msgType,
patientName: args.name,
idNum: args.id,
date: args.date,
flag: args.flag,
medicine: args.medicine,
value: args.value
}
patient.medicineWS.send(JSON.stringify(params))
cb({
status: 0
})
} else {
cb({
status: 1,
msg: "已断开连接"
})
}
},
2024-06-05 17:25:14 +08:00
disconnectMedicine(name: string, id: string, date: string, index: number) {
const patient: any = this.patient[name + id + date + index]
if (patient && patient.medicineWS) {
2024-06-05 17:25:14 +08:00
this.closeStatus[name + id + date + index + 'medicineWS'] = true
patient.medicineWS.close()
delete patient['medicineWS']
2024-06-05 17:25:14 +08:00
delete this.closeStatus[name + id + date + index + 'medicineWS']
}
},
}
2024-04-23 09:42:25 +08:00
})