chenyc
2022-07-04 145c0bf73ebd82ca635a1d1c82ca2bd2fb953f92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import Stomp from 'stompjs'
var stompClient: Stomp.Client | null=null
 
import { userInfoStore } from '@/stores/userInfo'
import {sockteStore} from '@/stores/sockteInfo'
 
 
 
 
interface device{
    deviceName:string
    deviceType:string
}
 
let devices:Array<device>=[]
let clientCode:string=''
 
const writeResult=(resultInfo:any)=>{
    if(devices.length>0){
        const deviceInfo=devices.find(de=>{de.deviceName===resultInfo.deviceName})
        if(deviceInfo!==undefined){
            switch(deviceInfo.deviceType){
                case '读卡器':
                    sockteStore().setdkqSockte(
                        {
                            deviceName:resultInfo.deviceName,
                            type:"读卡器",
                            result:resultInfo.result,
                            resultTime:resultInfo.resultTime,
                            state:true
                        }
                    )
                    break
                case "体重秤":
                    sockteStore().setweightSockte(
                        {
                            deviceName:resultInfo.deviceName,
                            type:"体重秤",
                            result:resultInfo.result,
                            resultTime:resultInfo.resultTime,
                            state:true
                        }
                    )
                    break
                case "血压计":
                    sockteStore().setxyjSockte(
                        {
                            deviceName:resultInfo.deviceName,
                            type:"血压计",
                            result:resultInfo.result,
                            resultTime:resultInfo.resultTime,
                            state:true
                        }
                    )
                    break
                default:
                    console.log('有配置类型没有匹配')
            }
        }
    }
 
}
 
// 订阅结果事件返回函数
const  callback = function(message:any) {
    if (message.body) {
        const data=JSON.parse(message.body)
    if(data.deviceName)
        console.log(data,'接收到的数据')
        writeResult(data)
    } else {
        alert("接收数据异常");
    }
};
const callbackState=function(message:any){
    if (message.body) {
        const data=JSON.parse(message.body)
    if(data.deviceName)
        console.log(data,'设备心跳包数据')
        writeResult(data)
    } else {
        alert("接收数据异常");
    }
}
const connectCallback=function(){
    console.log("链接成功",stompClient)
    // 更新sockte链接状态
    sockteStore().setsockteIsLink(true)
    console.log(sockteStore().isLink)
    if(stompClient!==null){
        if(devices.length>0){
            devices.forEach(de=>{
                stompClient.subscribe(`/queue/${clientCode}/${de.deviceName}/result`,callback)
                stompClient.send(`/app/device/request/${clientCode}/${de.deviceName}`, {}, JSON.stringify({"deviceNumber":de.deviceName}));
            })
        }
        
    }
}
const error_callback=function(error:any){
    console.log('链接错误',error);
    setTimeout(()=>{
        console.log('10秒之后重连')
        console.log(devices,'设备列表')
        const socket = new WebSocket('ws://hemobs.icoldchain.cn/broadcast')
        stompClient = Stomp.over(socket)
        stompClient.connect({}, connectCallback,error_callback)
 
    },10000)
}
// 创建客户端链接
const creatorClient=(devices2:any,clientCode2:any)=>{
    devices=devices2
    clientCode=clientCode2
    console.log(devices,'设备列表')
    const socket = new WebSocket('ws://hemobs.icoldchain.cn/broadcast')
    stompClient = Stomp.over(socket)
    stompClient.connect({}, connectCallback,error_callback)
 
}
export {creatorClient}