import { YeIMUniSDK, YeIMUniSDKDefines } from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js' import { login } from '@/request/api/chat.js' import md5 from '@/js_sdk/js-md5/build/md5.min.js'; import config from "@/config"; let userIds, isListenerChatList = false; const connect = success => { if (!userIds) return; let code = YeIMUniSDK.getInstance().readyState(); if (code === 0) return setTimeout(() => { if (success) success(); }, 5000) if (code === 1) { if (success) success(); return; } YeIMUniSDK.getInstance().connect({ userId: userIds, token: uni.getStorageSync('chatToken'), success: (response) => { if (response.code === 200) { $chat.listenerList(); if (success) success(); } }, fail: (err) => { console.log(err); logins(); } }); } const logins = () => { let timestamp = (new Date()).getTime() + 86400 * 1000; //1000天后过期 let sign = md5(String(userIds) + timestamp + "50abd47112ebe8c5a73f4694c96a49ce"); login({ userId: userIds, timestamp: timestamp, sign: sign }).then(res => { if (res.state) { uni.setStorageSync('chatToken', res.data.token); connect(); } }) } const $chat = { init() { //初始化YeIMUniSDK uni.$YeIMUniSDKDefines = YeIMUniSDKDefines; uni.$YeIM = YeIMUniSDK.init({ baseURL: config.baseUrl + '/im', // YeIMServer http url (如无特殊需求,服务端启动后仅需修改ip或者域名即可) socketURL: config.socketURL, // YeIMServer socket url(如无特殊需求,服务端启动后仅需修改ip或者域名即可) /** * 日志等级 * 0 普通日志,日志量较多,接入时建议使用 * 1 关键性日志,日志量较少,生产环境时建议使用 * 2 无日志级别,SDK 将不打印任何日志 */ logLevel: 2, // 日志等级, reConnectInterval: 3000, // 重连时间间隔 reConnectTotal: 99, // 最大重连次数,0不限制一直重连 heartInterval: 35000, //心跳时间间隔(默认30s) }); }, connect(userId) { userIds = userId; if (!userId) return; if (!uni.getStorageSync('chatToken')) { logins() } else { connect(); } }, getConversationList(success) { connect(() => { YeIMUniSDK.getInstance().getConversationList({ page: 1, //页码 limit: 100, //每页数量 success: success, fail: (err) => { console.log(err); } }); }); }, getHistoryMessageList(nextMessageId, userId, success, fail) { connect(() => { YeIMUniSDK.getInstance().getHistoryMessageList({ nextMessageId: nextMessageId, conversationId: userId, success: success, fail: fail }); }); }, sendImage(userId, success) { connect(() => { uni.chooseImage({ count: 1, //图片数量 sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], //从相册选择 success: res => { uni.getImageInfo({ src: res.tempFilePaths[0], success: image => { //创建图片消息 let message = YeIMUniSDK.getInstance() .createImageMessage({ toId: userId, //接收者用户ID字符串 conversationType: YeIMUniSDKDefines .CONVERSATION_TYPE .PRIVATE, //会话类型:私聊 body: { file: { tempFilePath: res.tempFilePaths[ 0], //本地图片临时路径 width: image.width, //图片宽度 height: image.height //图片高度 } }, extra: "", onProgress: (progress) => { // console.log(progress); } }); //发送消息 uni.showLoading(); YeIMUniSDK.getInstance().sendMessage({ message: message, success: success, fail: (err) => { uni.hideLoading(); uni.showToast({ title: '发送失败', icon: "none" }); } }); } }); } }); }); }, sendText(userId, content, success) { connect(() => { //创建文字消息 let message = YeIMUniSDK.getInstance().createTextMessage({ toId: userId, //接收者用户ID字符串 conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊 body: { text: content //文本消息内容字符串 }, extra: "" }); //发送消息 YeIMUniSDK.getInstance().sendMessage({ message: message, success: success, fail: (err) => { uni.hideLoading(); uni.showToast({ title: '发送失败', icon: "none" }); } }); }); }, disConnect() { let code = YeIMUniSDK.getInstance().readyState(); if (code === 1) YeIMUniSDK.getInstance().disConnect(); }, listenerList() { if (isListenerChatList) return; connect(() => { isListenerChatList = true; //监听会话列表更新 YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, ( list) => { uni.$emit('changeChatList', list); let chatList = list.filter(node => node.conversationId !== 'system'); let badge = 0; for (let i = 0; i < chatList.length; i++) { badge += chatList[i].unread } if (!badge) { uni.removeTabBarBadge({ index: 3 }) } else { uni.setTabBarBadge({ index: 3, text: String(badge) }) } }); }) }, clearConversationUnread(conversationId) { //清除指定会话未读数,并给对方发送已读回执 YeIMUniSDK.getInstance().clearConversationUnread(conversationId); } } export default $chat;