|
@@ -0,0 +1,232 @@
|
|
|
+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: 0, // 日志等级,
|
|
|
+ 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, 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() {
|
|
|
+ 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;
|