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
|