|
|
@@ -1,3 +1,4 @@
|
|
|
+// 若使用 IM 能力则引入
|
|
|
import NIM from 'nim-web-sdk-ng';
|
|
|
import http from './http';
|
|
|
import store from '../store';
|
|
|
@@ -59,192 +60,120 @@ var data = {};
|
|
|
|
|
|
var nim = null;
|
|
|
|
|
|
+// teamId='7748093008'
|
|
|
+
|
|
|
function initChat() {
|
|
|
console.log('34664');
|
|
|
- http.http.post('/neteaseUser/create?userId=' + store.state.userInfo.id).then(res => {
|
|
|
- console.log(res);
|
|
|
- NIM.getInstance({
|
|
|
- debug: true, // 是否开启日志,将其打印到console。集成开发阶段建议打开。
|
|
|
- appKey: '872dd9d0a0f8eda25b579654745db459',
|
|
|
- account: store.state.userInfo.id, //账号
|
|
|
- token: res.token,
|
|
|
- db: true, //若不要开启数据库请设置false。SDK默认为true。
|
|
|
- // privateConf: {}, // 私有化部署方案所需的配置
|
|
|
- onconnect: onConnect,
|
|
|
- onroamingmsgs: onRoamingMsgs,
|
|
|
- onofflinemsgs: onOfflineMsgs,
|
|
|
- onmsg: onMsg,
|
|
|
- onwillreconnect: onWillReconnect,
|
|
|
- ondisconnect: onDisconnect,
|
|
|
- onerror: onError,
|
|
|
- onteams: onTeams,
|
|
|
- onteammembers: onTeamMembers,
|
|
|
- //onsyncteammembersdone: onSyncTeamMembersDone,
|
|
|
- onupdateteammember: onUpdateTeamMember
|
|
|
+ http.http
|
|
|
+ .get('/neteaseUser/get/' + store.state.userInfo.id)
|
|
|
+ .then(res => {
|
|
|
+ return Promise.resolve(res);
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ return http.http.post('/neteaseUser/create?userId=' + store.state.userInfo.id);
|
|
|
+ })
|
|
|
+ .then(res => {
|
|
|
+ nim = new NIM({
|
|
|
+ debugLevel: 'debug', // 是否开启日志,将其打印到console。集成开发阶段建议打开。
|
|
|
+ appkey: '872dd9d0a0f8eda25b579654745db459',
|
|
|
+ account: store.state.userInfo.id, //账号
|
|
|
+ token: res.token,
|
|
|
+ db: true //若不要开启数据库请设置false。SDK默认为true。
|
|
|
+ });
|
|
|
+
|
|
|
+ nim.connect().then(() => {
|
|
|
+ getTeams();
|
|
|
+ getSession();
|
|
|
+ });
|
|
|
+
|
|
|
+ nim.on('msg', onMsg);
|
|
|
});
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
-function onConnect() {
|
|
|
- console.log('连接成功');
|
|
|
+async function getTeams() {
|
|
|
+ const teams = await nim.team.getTeams();
|
|
|
+ console.log(teams);
|
|
|
}
|
|
|
-function onWillReconnect(obj) {
|
|
|
- // 此时说明 SDK 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接
|
|
|
- console.log('即将重连');
|
|
|
- console.log(obj.retryCount);
|
|
|
- console.log(obj.duration);
|
|
|
+
|
|
|
+//获取群消息
|
|
|
+async function getTeam(teamId) {
|
|
|
+ const teamInfo = await nim.team.getTeamInfo({
|
|
|
+ teamId: teamId
|
|
|
+ });
|
|
|
+ return teamInfo;
|
|
|
}
|
|
|
-function onDisconnect(error) {
|
|
|
- // 此时说明 SDK 处于断开状态, 开发者此时应该根据错误码提示相应的错误信息, 并且跳转到登录页面
|
|
|
- console.log('丢失连接');
|
|
|
- console.log(error);
|
|
|
- if (error) {
|
|
|
- switch (error.code) {
|
|
|
- // 账号或者密码错误, 请跳转到登录页面并提示错误
|
|
|
- case 302:
|
|
|
- break;
|
|
|
- // 重复登录, 已经在其它端登录了, 请跳转到登录页面并提示错误
|
|
|
- case 417:
|
|
|
- break;
|
|
|
- // 被踢, 请提示错误后跳转到登录页面
|
|
|
- case 'kicked':
|
|
|
- break;
|
|
|
- default:
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+async function getHistroy(teamId) {
|
|
|
+ return await nim.msgLog.getHistoryMsgs({
|
|
|
+ scene: 'team',
|
|
|
+ to: teamId,
|
|
|
+ reverse: false,
|
|
|
+ asc: true
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
-function onRoamingMsgs(obj) {
|
|
|
- console.log('收到漫游消息', obj);
|
|
|
- pushMsg(obj.msgs);
|
|
|
+async function getSession() {
|
|
|
+ const sessions = await nim.session.getSessions({
|
|
|
+ limit: 10,
|
|
|
+ desc: true
|
|
|
+ });
|
|
|
+ console.log(sessions);
|
|
|
}
|
|
|
-function onOfflineMsgs(obj) {
|
|
|
- console.log('收到离线消息', obj);
|
|
|
- pushMsg(obj.msgs);
|
|
|
+
|
|
|
+async function onMsg(msg) {
|
|
|
+ console.log('Receive msg: ', msg);
|
|
|
+ await nim.msg.sendMsgReceipt({
|
|
|
+ msg: msg
|
|
|
+ });
|
|
|
}
|
|
|
-function onMsg(msg) {
|
|
|
- console.log('收到消息', msg.scene, msg.type, msg);
|
|
|
- pushMsg(msg);
|
|
|
- switch (msg.type) {
|
|
|
- case 'custom':
|
|
|
- onCustomMsg(msg);
|
|
|
- break;
|
|
|
- case 'notification':
|
|
|
- // 处理群通知消息
|
|
|
- onTeamNotificationMsg(msg);
|
|
|
- break;
|
|
|
- // 其它case
|
|
|
- default:
|
|
|
- break;
|
|
|
+
|
|
|
+async function sendMsg(msg = '', toTeamId, onSendBefore, type = 'Text', scene = 'team') {
|
|
|
+ if (type === 'Text') {
|
|
|
+ await nim.msg.sendTextMsg({
|
|
|
+ scene: scene,
|
|
|
+ to: toTeamId,
|
|
|
+ body: msg,
|
|
|
+ onSendBefore: msg => {
|
|
|
+ onSendBefore(msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ await nim.msg.sendImageMsg({
|
|
|
+ scene: scene,
|
|
|
+ to: toTeamId,
|
|
|
+ file: msg,
|
|
|
+ onUploadStart: function (task) {
|
|
|
+ console.log('Upload start!', task);
|
|
|
+ },
|
|
|
+ onUploadProgress: function (progress) {
|
|
|
+ console.log('Uploading!', progress);
|
|
|
+ },
|
|
|
+ onUploadDone: function (file) {
|
|
|
+ console.log('Upload done!', file);
|
|
|
+ },
|
|
|
+ onSendBefore: function (msg) {
|
|
|
+ console.log('Get msg before send', msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function onTeamNotificationMsg(msg) {}
|
|
|
-
|
|
|
-function pushMsg(msgs) {
|
|
|
+function getPushMsg(msgs, oldMsgs = []) {
|
|
|
if (!Array.isArray(msgs)) {
|
|
|
msgs = [msgs];
|
|
|
}
|
|
|
- var sessionId = msgs[0].scene + '-' + msgs[0].account;
|
|
|
- data.msgs = data.msgs || {};
|
|
|
- data.msgs[sessionId] = nim.mergeMsgs(data.msgs[sessionId], msgs);
|
|
|
-}
|
|
|
-function onCustomMsg(msg) {
|
|
|
- // 处理自定义消息
|
|
|
-}
|
|
|
-
|
|
|
-function onError(error) {
|
|
|
- console.log(error);
|
|
|
-}
|
|
|
-
|
|
|
-function onTeams(teams) {
|
|
|
- console.log('收到群列表', teams);
|
|
|
- data.teams = nim.mergeTeams(data.teams, teams);
|
|
|
- onInvalidTeams(teams.invalid);
|
|
|
-}
|
|
|
+ if (!msgs) {
|
|
|
+ return oldMsgs;
|
|
|
+ }
|
|
|
+ if (!msgs.length) {
|
|
|
+ return oldMsgs;
|
|
|
+ }
|
|
|
|
|
|
-function onInvalidTeams(teams) {
|
|
|
- data.teams = nim.cutTeams(data.teams, teams);
|
|
|
- data.invalidTeams = nim.mergeTeams(data.invalidTeams, teams);
|
|
|
- refreshTeamsUI();
|
|
|
-}
|
|
|
-// function onCreateTeam(team) {
|
|
|
-// console.log('你创建了一个群', team);
|
|
|
-// data.teams = nim.mergeTeams(data.teams, team);
|
|
|
-// refreshTeamsUI();
|
|
|
-// onTeamMembers({
|
|
|
-// teamId: team.teamId,
|
|
|
-// members: owner
|
|
|
-// });
|
|
|
-// }
|
|
|
-function refreshTeamsUI() {
|
|
|
- // 刷新界面
|
|
|
-}
|
|
|
-function onTeamMembers(obj) {
|
|
|
- console.log('群id', teamId, '群成员', members);
|
|
|
- var teamId = obj.teamId;
|
|
|
- var members = obj.members;
|
|
|
- data.teamMembers = data.teamMembers || {};
|
|
|
- data.teamMembers[teamId] = nim.mergeTeamMembers(data.teamMembers[teamId], members);
|
|
|
- data.teamMembers[teamId] = nim.cutTeamMembers(data.teamMembers[teamId], members.invalid);
|
|
|
- refreshTeamMembersUI();
|
|
|
-}
|
|
|
-// function onSyncTeamMembersDone() {
|
|
|
-// console.log('同步群成员列表完成');
|
|
|
-// }
|
|
|
-function onUpdateTeamMember(teamMember) {
|
|
|
- console.log('群成员信息更新了', teamMember);
|
|
|
- onTeamMembers({
|
|
|
- teamId: teamMember.teamId,
|
|
|
- members: teamMember
|
|
|
+ let _back = [...msgs, ...oldMsgs].sort((a, b) => {
|
|
|
+ return a.time - b.time;
|
|
|
});
|
|
|
-}
|
|
|
-function refreshTeamMembersUI() {
|
|
|
- // 刷新界面
|
|
|
-}
|
|
|
-
|
|
|
-//发送消息
|
|
|
-function sendMessage(content = '', teamId, type = 'text') {
|
|
|
- if (content) {
|
|
|
- if (type == 'text') {
|
|
|
- nim.sendText({
|
|
|
- scene: 'team',
|
|
|
- to: teamId, //消息接收方, 帐号或群id,
|
|
|
- text: 'hello',
|
|
|
- done: sendMsgDone
|
|
|
- });
|
|
|
- } else {
|
|
|
- nim.sendFile({
|
|
|
- scene: 'team',
|
|
|
- to: teamId, //消息接收方, 帐号或群id,
|
|
|
- type: 'image', //['text','image']
|
|
|
- text: 'hello',
|
|
|
- done: sendMsgDone
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
-function sendMsgDone(error, msg) {
|
|
|
- console.log(error);
|
|
|
- console.log(msg);
|
|
|
- console.log('发送' + msg.scene + ' ' + msg.type + '消息' + (!error ? '成功' : '失败') + ', id=' + msg.idClient);
|
|
|
- pushMsg(msg);
|
|
|
+ return _back;
|
|
|
}
|
|
|
|
|
|
-export {
|
|
|
- initChat,
|
|
|
- onConnect,
|
|
|
- onWillReconnect,
|
|
|
- onDisconnect,
|
|
|
- onError,
|
|
|
- onTeams,
|
|
|
- onInvalidTeams,
|
|
|
- refreshTeamsUI,
|
|
|
- onTeamMembers,
|
|
|
- onUpdateTeamMember,
|
|
|
- refreshTeamMembersUI,
|
|
|
- onMsg,
|
|
|
- sendMessage
|
|
|
-};
|
|
|
+export { initChat, getTeam, getHistroy, sendMsg, getPushMsg };
|