/* * 聊天室SDK,依赖于nim sdk */ import config from '../../configs' import pageUtil from '../../utils/page' import util from '../../utils' import store from '../' import {onChatroomMsgs} from './chatroomMsgs' // let sdkPath = '@/sdk/' + config.sdk // const SDK = require(sdkPath) // 切换聊天室之前需要断开连接,原因是移动端不断累积连接实例,消息并发较大时会有性能问题 // 重新初始化 NIM SDK export function initChatroomSDK ({ state, commit, dispatch }, obj) { let {chatroomId, address} = obj if (chatroomId && address) { if (state.chatroomInsts[chatroomId]) { state.chatroomInsts[chatroomId].connect() } else { state.chatroomInsts[chatroomId] = SDK.Chatroom.getInstance({ appKey: config.appkey, account: state.userUID, token: state.sdktoken, chatroomId, chatroomAddresses: address, onconnect: function onChatroomConnect (chatroom) { dispatch('hideLoading') commit('setCurrChatroom', chatroomId) }, onerror: function onChatroomError (error, obj) { dispatch('hideLoading') if (error) { location.href = '#/room' } }, onwillreconnect: function onChatroomWillReconnect (obj) { // 此时说明 `SDK` 已经断开连接, 请开发者在界面上提示用户连接已断开, 而且正在重新建立连接 }, ondisconnect: function onChatroomDisconnect (error) { // 此时说明 `SDK` 处于断开状态, 切换聊天室也会触发次回调 dispatch('hideLoading') if (error) { switch (error.code) { // 账号或者密码错误, 请跳转到登录页面并提示错误 case 302: // 此逻辑与nim sdk错误逻辑相同,复用nim sdk的 // 如果单用聊天室功能需要在此做处理 break case 13003: alert('抱歉,你已被主播拉入了黑名单') location.href = '#/room' break // 被踢, 请提示错误后跳转到登录页面 case 'kicked': if (error.reason === 'managerKick') { alert('你已被管理员移出聊天室') location.href = '#/room' } else if (error.reason === 'blacked') { alert('你已被管理员拉入黑名单,不能再进入') location.href = '#/room' } break default: break } } }, // 聊天室消息 onmsgs: onChatroomMsgs }) } } else { alert('没有聊天室地址') } } export function resetChatroomSDK ({state, commit, dispatch}, chatroomId) { if (chatroomId) { state.chatroomInsts[chatroomId].disconnect() } else { for (let tempRoomId in state.chatroomInsts) { state.chatroomInsts[tempRoomId].disconnect() } } commit('resetCurrChatroom') }