Files
xk-doctor-wx/common/common.js

162 lines
3.6 KiB
JavaScript
Raw Normal View History

2024-09-19 12:57:55 +08:00
import $store from '@/store/index.js';
class common {
constructor(arg) {
this.timer = null
this.url = arg.url
this.isOnline = false //是否在线
this.socket = null //socket对象
this.reconnectTime = 0
this.isOpenReconnect = true //是否重连
this.loadFinish = false;
// 获取当前用户相关信息
let user = uni.getStorageSync('userInfo')
this.user_token = uni.getStorageSync('token')
this.user = user ? user : {}
// 初始化聊天对象
this.TO = false;
// 连接和监听
if (this.user) {
this.connectSocket()
}
}
// 断线重连
reconnect() {
console.log(this.isOnline)
console.log("进入reconnect准备重新链接")
if (this.isOnline) {
return
}
if (this.reconnectTime >= 3) {
return this.reconnectConfirm()
}
this.reconnectTime += 1
console.log("重新链接")
// this.connectSocket();
}
// 连接socket
connectSocket() {
console.log("链接connectSocket")
this.socket = uni.connectSocket({
url: this.url,
header: {
authorization: `Bearer ${uni.getStorageSync('token')}`
},
method: 'POST',
complete: () => {}
})
// 监听连接成功
this.socket.onOpen && this.socket.onOpen(() => this.onOpen())
// 监听接收信息
this.socket.onMessage && this.socket.onMessage((res) => this.onMessage(res))
// 监听断开
this.socket.onClose && this.socket.onClose((e) => this.onClose(e))
// 监听错误
this.socket.onError && this.socket.onError(() => this.onError())
}
onOpen() {
// 用户上线
console.log('websocket连接成功')
this.isOnline = true
this.isOpenReconnect = true
console.log(this.url, 'doctor');
console.log(this.user, 'user')
// 获取用户离线消息
if (this.socket != null) {
var login = {
cmd: 'login',
userId: Number(this.user.su_id),
imStatus: Number(this.user.im_status),
userType: Number(this.user.role),
data: ''
};
this.initSocketLogin(login);
}
}
// 监听关闭
onClose(e) {
// 用户下线
this.isOnline = false
this.socket = null
console.log('socket连接已关闭:' + e)
if (this.isOpenReconnect) {
var that = this;
setTimeout(function() {
that.reconnect();
}, 3000);
}
}
// 监听连接错误
onError() {
// 用户下线
this.isOnline = false
this.socket = null
console.log('socket连接错误:' + e)
if (!this.socket) {
var that = this;
setTimeout(function() {
that.reconnect();
}, 3000);
}
}
// 监听接收消息
onMessage(data) {
console.log('监听接收消息:' + data);
// let res = JSON.parse(data.data)
// uni.$emit('onMessage', res)
}
// 关闭连接
close() {
if (this.socket) {
this.socket.close()
this.isOpenReconnect = false
} else if (uni.onSocketClose) {
uni.onSocketClose()
this.isOpenReconnect = false
}
this.destoryChatObject();
}
initSocketLogin(login) {
this.socket.send({
data: JSON.stringify(login),
success() {
console.log('用户IM登录成功:success')
},
fail(e) {
console.log('用户IM登录失败fail:' + e)
}
})
// setTimeout(() => {
// this.socket.send({
// data: JSON.stringify({
// data: '发送内容是:测试测试测试',
// }),
// })
// }, 4000)
}
// 创建聊天对象
createChatObject(detail) {
this.TO = detail
}
// 销毁聊天对象
destoryChatObject() {
this.TO = false
}
// 断线重连提示
reconnectConfirm() {
// this.close()
// this.connectSocket()
// this.reconnectTime = 0
}
// 验证是否上线
checkOnline() {
if (!this.isOnline) {
// 断线重连提示
this.reconnectConfirm()
return false
}
return true
}
}
export default common