|
|
|
@ -2,7 +2,7 @@
|
|
|
|
|
* @Author: ch
|
|
|
|
|
* @Date: 2022-05-18 14:54:47
|
|
|
|
|
* @LastEditors: ch
|
|
|
|
|
* @LastEditTime: 2022-06-08 15:10:31
|
|
|
|
|
* @LastEditTime: 2022-06-09 11:50:54
|
|
|
|
|
* @Description: file content
|
|
|
|
|
*/
|
|
|
|
|
import '@/utils/poto-req';
|
|
|
|
@ -37,7 +37,6 @@ class MsbIm {
|
|
|
|
|
defaultOption = {
|
|
|
|
|
ioKey: 'traceId',
|
|
|
|
|
reconnect: true,
|
|
|
|
|
logout: false,
|
|
|
|
|
};
|
|
|
|
|
socket = null;
|
|
|
|
|
isOpen = false;
|
|
|
|
@ -45,7 +44,7 @@ class MsbIm {
|
|
|
|
|
interceptors = {
|
|
|
|
|
dataChangeBefore: null,
|
|
|
|
|
dataChangeAfter: null,
|
|
|
|
|
onLogout: null,
|
|
|
|
|
onClose: null,
|
|
|
|
|
onMessage: null,
|
|
|
|
|
};
|
|
|
|
|
sessionData = [];
|
|
|
|
@ -70,11 +69,6 @@ class MsbIm {
|
|
|
|
|
};
|
|
|
|
|
const message = async (res) => {
|
|
|
|
|
const result = fromatPotoRsp(res.data);
|
|
|
|
|
// 没有401了要优化
|
|
|
|
|
if (result.code === 401) {
|
|
|
|
|
this.logout();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
this.interceptors.onMessage && this.interceptors.onMessage(result);
|
|
|
|
|
// 处理服务端主动推送的消息
|
|
|
|
|
this[onMessage](result);
|
|
|
|
@ -89,14 +83,27 @@ class MsbIm {
|
|
|
|
|
};
|
|
|
|
|
const close = () => {
|
|
|
|
|
console.log('[im] close');
|
|
|
|
|
if (this.option.reconnect && !this.option.logout) {
|
|
|
|
|
this[connect]();
|
|
|
|
|
}
|
|
|
|
|
this.option.logout = false;
|
|
|
|
|
this.interceptors.onClose && this.interceptors.onClose();
|
|
|
|
|
};
|
|
|
|
|
if (WebSocket) {
|
|
|
|
|
if (uni) {
|
|
|
|
|
this.socket = uni.connectSocket({
|
|
|
|
|
...this.option,
|
|
|
|
|
fail(e) {
|
|
|
|
|
reject(e);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
this.socket.onOpen(() => {
|
|
|
|
|
open();
|
|
|
|
|
this.socket.onMessage((res) => {
|
|
|
|
|
message(res);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
this.socket.onClose(() => {
|
|
|
|
|
close();
|
|
|
|
|
});
|
|
|
|
|
} else if (WebSocket) {
|
|
|
|
|
try {
|
|
|
|
|
this.socket = new WebSocket(option.url);
|
|
|
|
|
this.socket = new WebSocket(this.option.url);
|
|
|
|
|
this.socket.binaryType = 'arraybuffer';
|
|
|
|
|
this.socket.onopen = () => {
|
|
|
|
|
open();
|
|
|
|
@ -110,22 +117,6 @@ class MsbIm {
|
|
|
|
|
} catch (e) {
|
|
|
|
|
reject(e);
|
|
|
|
|
}
|
|
|
|
|
} else if (uni) {
|
|
|
|
|
this.socket = uni.connectSocket({
|
|
|
|
|
...option,
|
|
|
|
|
fail(e) {
|
|
|
|
|
reject(e);
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
this.socket.onOpen(() => {
|
|
|
|
|
onOpen();
|
|
|
|
|
this.socket.onMessage((res) => {
|
|
|
|
|
onMessage(res);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
this.socket.onClose(() => {
|
|
|
|
|
onClose();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -147,15 +138,15 @@ class MsbIm {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const par = fromatPotoReq(data.traceId, data.traceType, data.content);
|
|
|
|
|
if (WebSocket) {
|
|
|
|
|
this.socket.send(par);
|
|
|
|
|
} else if (uni) {
|
|
|
|
|
if (uni) {
|
|
|
|
|
this.socket.send({
|
|
|
|
|
data: par,
|
|
|
|
|
fail(e) {
|
|
|
|
|
reject({ error: e });
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
} else if (WebSocket) {
|
|
|
|
|
this.socket.send(par);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -214,9 +205,11 @@ class MsbIm {
|
|
|
|
|
heart();
|
|
|
|
|
}, 1000);
|
|
|
|
|
};
|
|
|
|
|
this[connect]({
|
|
|
|
|
this.option = {
|
|
|
|
|
...this.option,
|
|
|
|
|
...config,
|
|
|
|
|
})
|
|
|
|
|
};
|
|
|
|
|
this[connect]()
|
|
|
|
|
.then((res) => {
|
|
|
|
|
resolve(res);
|
|
|
|
|
heart();
|
|
|
|
@ -226,11 +219,6 @@ class MsbIm {
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
logout() {
|
|
|
|
|
this.option.logout = true;
|
|
|
|
|
this.socket.close();
|
|
|
|
|
this.interceptors.onLogout && this.interceptors.onLogout();
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 设置数据
|
|
|
|
|
*/
|
|
|
|
@ -261,7 +249,7 @@ class MsbIm {
|
|
|
|
|
|
|
|
|
|
console.log('[im] 获取会话列表--start', par);
|
|
|
|
|
let { error, result } = await ToAsyncAwait(this[send](par));
|
|
|
|
|
console.log('[im] 获取会话列表--end', result);
|
|
|
|
|
console.log('[im] 获取会话列表--end', result, error);
|
|
|
|
|
if (error) {
|
|
|
|
|
return Promise.reject(error);
|
|
|
|
|
}
|
|
|
|
@ -303,7 +291,7 @@ class MsbIm {
|
|
|
|
|
};
|
|
|
|
|
console.log('[im] 获取会话历史消息--start', par);
|
|
|
|
|
const { error, result } = await ToAsyncAwait(this[send](par));
|
|
|
|
|
console.log('[im] 获取会话历史消息--end', result);
|
|
|
|
|
console.log('[im] 获取会话历史消息--end', result, error);
|
|
|
|
|
if (error) {
|
|
|
|
|
return Promise.reject(error);
|
|
|
|
|
}
|
|
|
|
@ -330,7 +318,7 @@ class MsbIm {
|
|
|
|
|
};
|
|
|
|
|
console.log('[im] 会话已读--start', par);
|
|
|
|
|
const { error, result } = await this[send](par);
|
|
|
|
|
console.log('[im] 会话已读--end', result);
|
|
|
|
|
console.log('[im] 会话已读--end', result, error);
|
|
|
|
|
|
|
|
|
|
let newData = this.sessionData.map((item) => {
|
|
|
|
|
if (item.id == params.content.sessionId) {
|
|
|
|
@ -357,7 +345,6 @@ class MsbIm {
|
|
|
|
|
let msgCtx = {
|
|
|
|
|
...params.content,
|
|
|
|
|
...par,
|
|
|
|
|
fromId: params.fromId,
|
|
|
|
|
createTimeStamp: new Date().getTime(),
|
|
|
|
|
sendStatus: 'loading',
|
|
|
|
|
};
|
|
|
|
@ -368,7 +355,7 @@ class MsbIm {
|
|
|
|
|
|
|
|
|
|
console.log('[im] 发送消息--start', par);
|
|
|
|
|
const { error, result } = await ToAsyncAwait(this[send](par));
|
|
|
|
|
console.log('[im] 发送消息--end', result);
|
|
|
|
|
console.log('[im] 发送消息--end', result, error);
|
|
|
|
|
// 接到通知,标记消息是否发送成功
|
|
|
|
|
for (let i = curSession.messageList.length; i--; ) {
|
|
|
|
|
const item = curSession.messageList[i];
|
|
|
|
@ -402,7 +389,7 @@ class MsbIm {
|
|
|
|
|
content: params.content,
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
console.log('[im] 重新发送消息--end', result);
|
|
|
|
|
console.log('[im] 重新发送消息--end', result, error);
|
|
|
|
|
params.createTimeStamp = result.createTimeStamp;
|
|
|
|
|
if (error) {
|
|
|
|
|
params.sendStatus = 'fail';
|
|
|
|
@ -426,12 +413,12 @@ class MsbIm {
|
|
|
|
|
async createSession(params) {
|
|
|
|
|
const par = {
|
|
|
|
|
traceId: CreateUUID(),
|
|
|
|
|
traceType: 21,
|
|
|
|
|
traceType: 9,
|
|
|
|
|
...params,
|
|
|
|
|
};
|
|
|
|
|
console.log('[im] 主动创建会话--start', par);
|
|
|
|
|
const { result, error } = await ToAsyncAwait(this[send](par));
|
|
|
|
|
console.log('[im] 主动创建会话--start', result);
|
|
|
|
|
console.log('[im] 主动创建会话--end', result, error);
|
|
|
|
|
if (error) {
|
|
|
|
|
return Promise.reject(error);
|
|
|
|
|
}
|
|
|
|
|