// @ts-nocheck import { log } from 'console' import { randomString } from './uitls' import { useUserStore } from '@/store/user' const baseUrl = import.meta.env.VITE_SERVER_BASEURL class socket { constructor() { console.log(77777777777777) this.socketUrl = baseUrl this.socketStart = false this.socketType = '' this.monitorSocketError() this.monitorSocketClose() this.socketReceive() } init(socket_type, callback ?) { const userStore = useUserStore() const _this = this if (baseUrl) { if (this.socketStart) { console.log('webSocket已经启动了') } else { _this.socketType = socket_type let url = this.socketUrl.replace('https://', 'wss://').replace('http://', 'ws://') + '/' + socket_type + '/' + userStore.userInfo.userid + '_app' if (socket_type == 'eoaNewChatSocket') { let randomMessageId = randomString(6) url = this.socketUrl.replace('https://', 'wss://').replace('http://', 'ws://') + '/eoaNewChatSocket/' + userStore.userInfo.userid + '/' + randomMessageId } console.log('启动this.socketUrl连接地址:', url) // update-begin-author:taoyan date:20220422 for:v2.4.6 的 websocket 服务端,存在性能和安全问题。 #3278 let token = userStore.userInfo.token uni.connectSocket({ url: url, method: 'GET', protocols: [token], }) // update-end-author:taoyan date:20220422 for: v2.4.6 的 websocket 服务端,存在性能和安全问题。 #3278 uni.onSocketOpen((res) => { console.log("连接进来了--------53333333333323----") this.socketStart = true callback && callback() console.log('WebSocket连接已打开!') }) /* setTimeout(() => { _this.getHeartbeat(); }, 5000); */ } } else { console.log('config/baseUrl socketUrl为空') } } // Socket给服务器发送消息 send(data, callback) { const userStore = useUserStore() const _this = this if (userStore.userInfo.userid) { data.userUid = userStore.userInfo.userid } console.log(data) uni.sendSocketMessage({ data: JSON.stringify(data), success: () => { callback && callback(true) }, fail: () => { callback && callback(false) }, }) } // Socket接收服务器发送过来的消息 socketReceive() { const _this = this uni.onSocketMessage(function (res) { console.log('APP:--》收到服务器内容:', res) console.log('连接路径----:', baseUrl) if (res.data.startsWith('CONNECTED') || res.data.startsWith('MESSAGE') || res.data.startsWith('RECEIPT')) { console.log('放行----------:', res) // 放行 STOMP 协议消息,交给 socketTask.onMessage 处理 by 闵 return; } let data = JSON.parse(res.data) // console.log('收到服务器内容:', data); _this.acceptMessage && _this.acceptMessage(data) }) } // 关闭Socket closeSocket() { console.log(9099999) const _this = this uni.closeSocket() _this.socketStart = false } // 监听Socket关闭 monitorSocketClose() { const _this = this uni.onSocketClose(function (res) { console.log('关闭222222222:',res) if (res.code = 1000) { // 放行 STOMP 协议消息,交给 socketTask.onMessage 处理 by 闵 return; } console.log('WebSocket 已关闭!') _this.socketStart = false setTimeout(function () { _this.init(_this.socketType) }, 3000) }) } // 监听Socket错误 monitorSocketError() { const _this = this uni.onSocketError(function (res) { _this.socketStart = false console.log('WebSocket连接打开失败,请检查!') }) } // 心跳 getHeartbeat() { const userStore = useUserStore() const _this = this this.send( { type: '心跳', userUid: userStore.userInfo.userid, }, (val) => { setTimeout(() => { if (val) { // _this.getHeartbeat(); } else { if (!_this.socketStart) { // _this.init(); } } }, 10000) }, ) } } const mySocket = new socket() export default mySocket