jeecgBootUniapp/src/common/socket.ts

156 lines
4.0 KiB
Vue
Raw Normal View History

2025-04-29 08:37:17 +00:00
// @ts-nocheck
2025-07-24 01:39:14 +00:00
import { log } from 'console'
2025-04-29 08:37:17 +00:00
import { randomString } from './uitls'
import { useUserStore } from '@/store/user'
const baseUrl = import.meta.env.VITE_SERVER_BASEURL
class socket {
2025-07-24 01:39:14 +00:00
constructor() {
console.log(77777777777777)
this.socketUrl = baseUrl
this.socketStart = false
this.socketType = ''
this.monitorSocketError()
this.monitorSocketClose()
this.socketReceive()
}
init(socket_type, callback ?) {
2025-04-29 08:37:17 +00:00
const userStore = useUserStore()
2025-07-24 01:39:14 +00:00
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
2025-04-29 08:37:17 +00:00
2025-07-24 01:39:14 +00:00
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) {
2025-04-29 08:37:17 +00:00
const userStore = useUserStore()
2025-07-24 01:39:14 +00:00
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() {
2025-04-29 08:37:17 +00:00
const userStore = useUserStore()
2025-07-24 01:39:14 +00:00
const _this = this
this.send(
{
type: '心跳',
userUid: userStore.userInfo.userid,
},
(val) => {
setTimeout(() => {
if (val) {
// _this.getHeartbeat();
} else {
if (!_this.socketStart) {
// _this.init();
}
}
}, 10000)
},
)
}
2025-04-29 08:37:17 +00:00
}
const mySocket = new socket()
2025-07-24 01:39:14 +00:00
export default mySocket