import { YeIMUniSDK, // SDK YeIMUniSDKDefines // 预定义常量 } from 'yeim-uni-sdk' import { login, sendSystem } from '@/httpApi/chat.js' import md5 from 'js-md5' import config from "@/config"; import store from '@/store' let isListenerChatList = false; const connect = success => { if (!store.getters.user.userId) return; let code = YeIMUniSDK.getInstance().readyState(); if (code !== 3) { if (success) success(); return; } YeIMUniSDK.getInstance().connect({ userId: store.getters.user.userId, token: localStorage.getItem('chatToken'), success: (response) => { if (response.code === 200) { $chat.listenerList(); if (success) success(); } }, fail: (err) => { console.log('error'); logins(); } }); } const logins = () => { let timestamp = (new Date()).getTime() + 86400 * 1000; //1000天后过期 let sign = md5(String(store.getters.user.userId) + timestamp + "50abd47112ebe8c5a73f4694c96a49ce"); login({ userId: store.getters.user.userId, timestamp: timestamp, sign: sign }).then(res => { if (res.state) { localStorage.setItem('chatToken', res.data.token); connect(); } }) } const $chat = { init() { YeIMUniSDK.init({ baseURL: config.baseURL + '/im', // YeIMServer http url (如无特殊需求,服务端启动后仅需修改ip或者域名即可) socketURL: 'wss://www.waywish.com/im/im', // YeIMServer socket url(如无特殊需求,服务端启动后仅需修改ip或者域名即可) /** * 日志等级 * 0 普通日志,日志量较多,接入时建议使用 * 1 关键性日志,日志量较少,生产环境时建议使用 * 2 无日志级别,SDK 将不打印任何日志 */ logLevel: 1, // 日志等级, reConnectInterval: 3000, // 重连时间间隔 reConnectTotal: 99, // 最大重连次数,0不限制一直重连 heartInterval: 35000, //心跳时间间隔(默认30s) }); }, connect() { if (!localStorage.getItem('chatToken')) { logins() } else { connect(); } }, getConversationList(success) { connect(() => { YeIMUniSDK.getInstance().getConversationList({ page: 1, //页码 limit: 100, //每页数量 success: success, fail: (err) => { console.log('error'); } }); }); }, getHistoryMessageList(nextMessageId, userId, success, fail) { connect(() => { YeIMUniSDK.getInstance().getHistoryMessageList({ nextMessageId: nextMessageId, conversationId: userId, success: success, fail: fail }); }); }, sendImage(userId, option, success) {}, sendText(userId, content, success, fail) { 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: fail }); }); }, disConnect() { YeIMUniSDK.getInstance().disConnect(); }, listenerLogin() { //监听登陆互踢,当同一用户重复登录时触发 YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.KICKED_OUT, () => { // uni.removeStorageSync('token'); // uni.removeStorageSync('chatToken'); // uni.showToast({ // title: '该用户已在其他设备登录', // icon: 'none' // }) // uni.switchTab({ // url: '/pages/highseas/highseas' // }); }); }, listenerList() { if (isListenerChatList) return; connect(() => { isListenerChatList = true; //监听会话列表更新 YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, ( list) => { store.dispatch('app/changeChatList', list); }); }) }, clearConversationUnread(conversationId) { //清除指定会话未读数,并给对方发送已读回执 YeIMUniSDK.getInstance().clearConversationUnread(conversationId); }, sendSystemMessage() { let timestamp = (new Date()).getTime() + 86400 * 1000; //1000天后过期 let sign = md5('system' + timestamp + "50abd47112ebe8c5a73f4694c96a49ce"); login({ userId: 'system', timestamp: timestamp, sign: sign }).then(res => { if (res.code === 200) { localStorage.setItem('systemChatToken', res.data.token); sendSystem({ body: { text: "2" }, conversationId: "4", conversationType: "private", extra: "", from: 'system', fromUserInfo: {}, isDeleted: 0, isRead: 0, isRevoke: 0, status: "unSend", time: new Date().getTime(), to: 1, type: "text", }) } }) } } export default $chat;