jeecgBootUniapp/src/common/socket.ts

141 lines
3.8 KiB
Vue
Raw Normal View History

2025-04-29 08:37:17 +00:00
// @ts-nocheck
import { randomString } from './uitls'
import { useUserStore } from '@/store/user'
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
class socket {
constructor() {
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) => {
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:--》收到服务器内容:')
let data = JSON.parse(res.data)
// console.log('收到服务器内容:', data);
_this.acceptMessage && _this.acceptMessage(data)
})
}
// 关闭Socket
closeSocket() {
const _this = this
uni.closeSocket()
_this.socketStart = false
}
// 监听Socket关闭
monitorSocketClose() {
const _this = this
uni.onSocketClose(function (res) {
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