156 lines
4.0 KiB
Vue
156 lines
4.0 KiB
Vue
// @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 |