Files
im-system/im-uniapp/common/socketTask.js
2023-12-02 01:18:35 +08:00

202 lines
4.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import config from "@/common/config.js"
let timer = null
let retimer = null
import store from '../store'
import * as sdk from "@/common/imSdk/lim-sdk.js";
import lim from "@/common/imSdk/sdk-bridge.js";
import publicFc from '@/common/publicFc';
import localForage from 'localforage';
import { getCurrentInstance } from 'vue'
let __that = this
export default {
socketTask: null,
// 连接WebSocket
connectSocket() {
const ListenerMap = {
onSocketConnectEvent: (option, status, data) => {
console.log("已建立连接:" + JSON.stringify(status));
},
onSocketErrorEvent: (error) => {
console.log("连接出现错误:" + userId);
},
onSocketReConnectEvent: () => {
console.log("正在重连:");
},
onSocketCloseEvent: () => {
console.log("连接关闭:");
console.log(__that)
__that.$socketTask.socketTask=null;
__that.$socketTask.connectSocket()
},
onSocketReConnectSuccessEvent: () => {
console.log("重连成功");
},
onOfflineMessage: (e) => {
// console.log("====================拉取到离线消息")
// console.log(e)
const userId = uni.getStorageSync("userId")
setTimeout(function() {
if (e.length > 0) {
e.map((msg) => {
setTimeout(() => {
const _data = publicFc.formatMessage(msg)
console.log(_data)
if (_data.fromId != userId) {
uni.$emit('onP2PMessage', _data);
store.dispatch('onP2PMessage', _data)
}
}, 500)
})
}
}, 500);
},
onTestMessage: (e) => {
console.log("onTestMessage ");
store.dispatch('onP2PMessage', e)
},
onP2PMessage: (e) => {
console.log("onP2PMessag e :::");
console.log(JSON.parse(e))
console.log("接收到的ws原始数据")
e = JSON.parse(e)
console.log(e)
console.log("接收到的ws格式化之后数据")
const _data = publicFc.formatMessage(e.data)
console.log(_data)
uni.$emit('onP2PMessage', _data);
store.dispatch('onP2PMessage', _data)
},
onLogin: (uid) => {
console.log("用户" + uid + "登陆sdk成功");
}
};
const userId = uni.getStorageSync("userId")
const imUserSign = uni.getStorageSync("imUserSign")
var listeners = {};
for (const v in ListenerMap) {
listeners[v] = ListenerMap[v];
}
console.log(lim)
// 防止多次建立ws链接貌似还没有生效需要检查
if (this.socketTask != null) {
return false
}
lim.lim.im.init(config.getImApiUrl(), config.getImAppId(), userId, imUserSign, listeners, (
sdk) => {
if (sdk) {
console.warn("====================")
this.socketTask = sdk;
console.log(this.socketTask)
console.log('sdk 成功连接的回调, 可以使用 sdk 请求数据了.');
sdk.getSingleUserInfo(userId).then(res => {
console.log("获取到自己的用户信息")
console.log(res)
if (res.code == 200) {
uni.setStorageSync('userInfo', res.data);
}
})
// sdk.getAllFriend().then(res => {
// console.warn(res)
// })
// sdk.getUserSequence().then(res => {
// console.warn(res)
// })
sdk.getUserConversationList(0).then(res => {
console.warn(res)
})
} else {
console.log('sdk 初始化失败.');
}
})
/*
this.socketTask = uni.connectSocket({
url: 'wss://im-api.q3z3.com/ws?Authorization=' + uni.getStorageSync('Authorization'),
complete: () => {}
});
this.socketTask.onOpen(res => {
console.log('WebSocket连接已打开');
// 设置心跳
timer = setInterval(() => {
uni.sendSocketMessage({
data: 'isConnact',
success: res => {
if (res.errMsg == 'sendSocketMessage:ok') {
console.log('WebSocket已连接')
} else {
this.connectSocket()
}
}
})
}, 5000)
})
// 监听接收
this.socketTask.onMessage(res => {
if (res.data == 'ok') {
return
}
var data = JSON.parse(res.data);
fc.getPush(data);
console.log('WebSocket接收消息');
})
// 监听关闭
this.socketTask.onClose(res => {
console.log('WebSocket连接已关闭');
let token = uni.getStorageSync('Authorization');
if (this.socketTask && token) {
this.socketTaskClose()
retimer = setTimeout(() => {
this.connectSocket()
}, 5000)
}
})
// 监听异常
this.socketTask.onError(res => {
console.log('WebSocket连接打开失败正在尝试重新打开');
if (this.socketTask) {
this.socketTaskClose()
retimer = setTimeout(() => {
this.connectSocket()
}, 5000)
}
});
*/
},
// 关闭WebSocket
socketTaskClose() {
if (this.socketTask) {
this.socketTask.close()
clearInterval(timer)
clearTimeout(retimer)
console.log('关闭WebSocket');
}
},
}