use-on-demand
Version:
380 lines (324 loc) • 11 kB
TypeScript
// import {privateConf} from '~/components/nim/3rd/nim_server_conf';
// import {RoomLogicClass} from '~/components/nim/im/chatroom/bz-util/room';
import Vue from 'vue';
declare global {
interface Window {
SDK: {
Chatroom: {
/**
* 1.在这个方法中,调用了这个接口【https://wlnimsc1.netease.im/socket.io/1/?t=1587987426591】
*
* 2.在这个SDK的WebSocket的消息返回中,会调用【https://dr.netease.im/1.gif?event=ws_connected&appkey=45c6af3c98409b18a84451215d0bdd6e&uid=hanshou101&os=web&session=&ver=75&type=chatroom&platform=chrome80】接口
*/
getInstance(options: NimNS.SDK.ChatRoom_InitOptions): NimNS.SDK.ChatRoom_Instance;
}
};
// RoomLogicClass_OnWindow: RoomLogicClass,
}
namespace NimNS {
interface BaseConfig_Type {
appkey: string;
url: string;
chatroomList: string;
chatroomAddr: string;
}
type Combined_BaseConfig_Type = BaseConfig_Type & {
openSubscription: boolean;
usePrivateEnv: undefined | 1 | 2;
// privateConf: typeof privateConf;
}
type Emoji_Type = {
file: string;
}
type EmojiList_Type = {
[key: string]: {
[key: string]: Emoji_Type;
};
}
type Pinup_Type = {};
type PinupList_Type = {
[key: string]: Array<any>
};
type EmojiConfig_Type = {
emojiList?: EmojiList_Type;//表情列表
pinupList?: PinupList_Type;//贴图列表
callback?: (result: EmojiConfig_CbResultType) => void;
imgpath?: string; // 图片根目录
width?: number;
height?: number;
}
type EmojiConfig_CbResultType = {
emoji: string;
}
type ConnectedMsg_Type = {
chatroom: Link.RoomInfo;
member: MemberType_Type,
}
interface Msg_BaseType {
text: string;
from: string;
idClient: boolean;
fromClientType: string;
chatroomId: string;
flow: string;
status: string;
resend: boolean;
time: number;
type: 'text' | 'custom' | 'notification'
} //
// 文字消息、自定义消息
interface TextOrCustom_Msg extends Msg_BaseType {
content: string;
custom?: string;
fromNick: string;
fromAvatar: string;
userUpdateTime: number;
} //
// 系统消息
interface SysMsg_Type extends Msg_BaseType {
attach: {
to: Array<string>; // 存放,account账户ID的数组
type: 'blackMember' | 'unblackMember' | 'gagMember' | 'ungagMember' | 'addManager' | 'removeManager'
| 'memberEnter' | 'memberExit' | 'addCommon' | 'removeCommon'
| 'kickMember';
from: string;
toNick: string[];
fromNick: string[];
}/* & Msg_BaseType['attach'] */;
} //
enum MemberNumberType {
'guest' = -2,
'common' = 0,
'owner' = 1,
'manager' = 2,
'restricted' = -1,
}
type MemberType_Type = {
type: 'guest' | 'common' | 'owner' | 'manager' | 'restricted';
account: string;
updateTime: number;
enterTime: number; // 可能和游客相关
avatar: string;
nick: string;
valid: boolean;
online: boolean;
gaged: boolean; // 被临时禁言
tempMuted: boolean;
tempMuteDuration: number;
blacked: boolean; // 被放入黑名单
custom: string;
}
namespace Link {
interface Data_Type {
person: { // 用于,逐个将成员,以Key-Value的形式,存放进去。
[key: string]: MemberType_Type | undefined,
};
roomInfo?: RoomInfo;
}
interface RoomInfo {
id: string;
name: string;
custom: string;
createTime: number;
queuelevel: string;
creator: string;
onlineMemberNum: number;
mute: boolean;
announcement: string;
broadcastUrl: string;
}
interface Base_Option_Type {
appKey: string;
id: number; // FIXME 这里,其实正统的数据,应该是【chatroomId】。只是之前的老代码,把它写作了 id ,这是一个错误。
chatroomAddresses?: Array<string>; // FIXME 这个,是一定要传的;但是老代码,把它拆成了两部分的拼接。
}
interface Anonymous_Option_Type extends Base_Option_Type {
chatroomNick: string;
chatroomAvatar: string;
isAnonymous?: true;
}
interface Logged_Option_Type extends Base_Option_Type {
account: string;
token: string;
}
enum DealCommand_TypeEnum {
'kickChatroomMember' = '0', // 踢出房间
'markChatroomGaglist' = '1', // 禁言
'markChatroomBlacklist' = '2', // 黑名单
'markChatroomManager' = '3', // 任命管理员
}
/*
enum CommandTypeE {
'kick' = '0',
'gag' = '1',
'black' = '2',
'admin' = '3',
}
*/
}
namespace SDK {
type ChatRoom_ErrMessage = {
message: string;
} | undefined;
type ChatRoom_CustomMessage_Type = {
type: number;
data: {
value: any;
}
}
type ChatRoom_ChatroomMembersInfo_Type = {
members: Array<MemberType_Type>
}
type ChatRoom_DoneFn<T = {}> = (error: ChatRoom_ErrMessage, obj: T) => void;
interface ChatRoom_InitOptions {
appKey: string;
account: string;
token: string;
// privateConf?: typeof privateConf; // 私有化配置文件 (WARN 此处,仅官方Demo的情况下,需要)
chatroomId: number;
chatroomAddresses: string[]; //
onconnect(msg: NimNS.ConnectedMsg_Type): void; //
onmsgs(msgs: Array<NimNS.TextOrCustom_Msg>): void; //
onerror(error: string, obj: IndexedObj): void; //
onwillreconnect(obj: IndexedObj): void; //
ondisconnect(error: {
code: 302 | 13003 | 403
| 'kicked'
| 'logout';
reason: 'managerKick' | 'blacked';
message: string;
}): void; //
// 访客模式,可选项
isAnonymous?: boolean;
chatroomNick?: string; // 游客模式下,是本地手动加的
}
interface ChatRoom_Instance {
account: string;
// 同步显示图片
viewImageSync(cfg: {
url: string;
quality: number;
thumbnail: {
width: number,
height: number,
mode: 'cover'
}
}): string;
/**
* 发送文本
* @param {String} text 内容
* @param {String} custom 扩展字段json序列化{type:0} 0游客,1正常 2房主 3管理员 4受限制的
* @param {Function} callback 回调
* @return {void}
*/
sendText(cfg: {
custom: string,
text: string,
done: ChatRoom_DoneFn<NimNS.TextOrCustom_Msg>,
}): void;
/**
* 发送自定义消息
* @param {String} custom 扩展字段json序列化{type:0} 0游客,1正常 2房主 3管理员 4受限制的
* @param {Object} content 自定义消息内容
* @param {Function} callback 回调
* @return {void}
*/
sendCustomMsg(cfg: {
custom: string,
content: string,
done: ChatRoom_DoneFn<NimNS.TextOrCustom_Msg>,
}): void;
/**
* 获取聊天室成员
* @param {Boolean} guest true获取游客 false固定成员
* @param {number} time 上一个记录的时间戳 0为当前
* @param {boolean} onlyOnline
* @param {number} limit 限制
* @param {Function} callback 回调
* @return {void}
*/
getChatroomMembers(cfg: {
guest: boolean,
time: number,
onlyOnline: boolean,
limit: number,
done: ChatRoom_DoneFn<ChatRoom_ChatroomMembersInfo_Type>,
}): void;
/**
* 获取历史消息
* @param {number} limit 限制
* @param {Function} callback 回调
* @return {void}
*/
getHistoryMsgs(cfg: {
limit: number,
done: ChatRoom_DoneFn<{
msgs: Array<NimNS.TextOrCustom_Msg>
}>,
}): void;
/**
* 踢人
* @param {string} account 账号
* @param {Function} callback 回调
* @return {void}
*/
kickChatroomMember(cfg: {
account: string,
done: Function,
}): void;
/**
* 标记黑名单
* @param {string} account 账号
* @param {Boolean} isAdd 添加移除
* @param {Function} callback 回调
* @return {void}
*/
markChatroomBlacklist(cfg: {
account: string,
isAdd: boolean,
done: ChatRoom_DoneFn,
}): void;
/**
* 标记禁言名单
* @param {string} account 账号
* @param {Boolean} isAdd 添加移除
* @param {Function} callback 回调
* @return {void}
*/
markChatroomGaglist(cfg: {
account: string,
isAdd: boolean,
done: ChatRoom_DoneFn,
}): void;
/**
* 标记管理员
* @param {string} account 账号
* @param {Boolean} isAdd 添加移除
* @param {Function} callback 回调
* @return {void}
*/
markChatroomManager(cfg: {
account: string,
isAdd: boolean,
done: Function,
}): void;
/**
* 获取聊天室群成员信息
* @param {Array} account 需要获取信息的成员队列
* @param {Function} callback 回调方法
* @return {void}
*/
getChatroomMembersInfo(cfg: {
accounts: Array<string>,
done: ChatRoom_DoneFn<ChatRoom_ChatroomMembersInfo_Type>,
}): void;
/**
* 清除聊天室实例
*/
destroy(cfg: {
done: ChatRoom_DoneFn<undefined>,
}): void;
}
}
}
}