123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- import {
- YeIMUniSDK,
- YeIMUniSDKDefines
- } from '@/uni_modules/wzJun1-YeIM-Uni-SDK/js_sdk/yeim-uni-sdk.min.js'
- import {
- login,
- sendSystem
- } from '@/request/api/chat.js'
- import md5 from '@/js_sdk/js-md5/build/md5.min.js';
- import config from "@/config";
- let userIds;
- const connect = success => {
- if (!userIds) return;
- let code = YeIMUniSDK.getInstance().readyState();
- if (code !== 3) {
- 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) => {
- 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.code === 200) {
- 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('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);
- }
- });
- //发送消息
- YeIMUniSDK.getInstance().sendMessage({
- message: message,
- success: success,
- fail: (err) => {
- console.log('error------');
- }
- });
- }
- });
- }
- });
- });
- },
- 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) => {}
- });
- });
- },
- 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() {
- connect(() => {
- //监听会话列表更新
- YeIMUniSDK.getInstance().addEventListener(YeIMUniSDKDefines.EVENT.CONVERSATION_LIST_CHANGED, (
- list) => {
- uni.$emit('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) {
- uni.setStorageSync('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;
|