-
public static getInstance(options?: WSOptions): IMClientManager // 参数如下 export interface WSOptions { wsUrl: string, //websocket url wsProtocal?: string, //websocker协议 chatBaseCB?: ChatBaseCB, // 见下方 chatTransDataCB?: ChatTransDataCB, // 见下方 messageQoSCB?: MessageQoSCB, // 见下方 uni?: Uni, //使用uni时传入 } export interface ChatBaseCB { onLoginOrReloginSuccessCB?: () => void, // 登陆或重新登陆成功callback onLoginOrReloginFailCB?: () => void, // 登陆或重新登陆失败callback onLinkCloseMessageCB?: () => void // 网络连接失败callback } export interface ChatTransDataCB { onTransBufferCB?: (msg: Protocal) => void, // 收到其他客户端通用消息,消息格式见下方通用数据格式 onTransErrorCB?: (params: object) => void // 收到服务端错误消息 } export interface MessageQoSCB { handleMessageLost?: (messages: Array<Protocal>) => void, // 发送过程判断为丢包,丢包处理 messagesBeReceivedCB?: (fingerPrint: string) => void // 服务端ack包(当发送包Qos=true时才有ack包,表示指纹为fp的数据包已被服务端接收) }
e.g.
function onTransBufferCB(msg) { const { fp, from, to, dataContent, typeu, sendTs } = msg; } function onTransErrorCB(params) { const { errorCode, errorMsg } = params; } function handleMessageLost(lostMsgs: Array<Protocal>) { lostMsgs.forEach(msg=> { console.debug(msg); }); } function messagesBeReceivedCB(fp: string) { console.debug(fp); } const options: WSOptions = { wsUrl: WS_URL, chatBaseCB: { onLoginOrReloginSuccessCB: () => { alert('登陆成功'); }, onLoginOrReloginFailCB: () => { alert('登陆失败'); }, onLinkCloseMessageCB: () => { alert('网络连接失败'); } }, chatTransDataCB: { onTransBufferCB, onTransErrorCB }, messageQoSCB: { handleMessageLost, messagesBeReceivedCB } }; imSDK.getInstance(options);
-
public login({ loginUserId: string, //登陆方id loginToken: string, //应用层token,一般通过http请求登陆应用返回token,再用该token发送websocket的登陆请求 app: string, //应用层项目名 extra?: string, //其他参数 callBack?: (code: number) => void //code === 0 表示客户端登陆包发送成功 }): void
e.g.:
imSDK.getInstance().login({ loginUserId: '1', loginToken: 'token', app: 'test', callBack: (code) => { if (code !== 0) { alert('登陆失败,请重试'); } } });
-
//code === 0 表示客户端注销包发送成功 public logout(callBack?: (code: number) => void): void
e.g.
imSDK.getInstance().logout();
-
public send({ dataContent: string, //发送内容,内容为文本时为本身,为文件时由应用层定义规则并解析,比如定义为`${fp}|${fileName}|${fileType}|${fileKey}` fromId: string, // 发送方id,可选,默认为已登陆id toId: string, // 接收方id Qos: boolean = true, //是否需要服务端ack,默认为true fingerPrint?: string, //消息报指纹,唯一id typeu: number = 0, // 单聊0,群聊1 callBack?: (code: number, msg: Protocal) => void //code === 0 表示客户端发送成功,msg为发送包 }): void
e.g.
imSDK.getInstance().send({ dataContent: 'test message', toId: '2', callBack: (code, msg) => { console.debug(msg); if(code !== 0){ alert('发送失败') } } });
-
public release(): void
e.g.
imSDK.getInstance().release();
-
主进程:
ClientCoreSDK
-
其他主要进程:
AutoReLoginDaemon 自动登录进程
KeepAliveDaemon 心跳进程(超时重启并启动自动登录进程)
QoS4ReciveDaemon 消息接受质量保证进程(Qos接收处理)
QoS4SendDaemon 消息发送质量保证进程 (Qos发送处理)
-
其他封装:
LocalWSDataReciever 消息接收处理,包括通用数据包、心跳包、登陆注销包等,
LocalWSDataSender 消息发送处理
LocalWSProvider websocket初始化,封装等
parameter | type | description |
---|---|---|
fp | string | 消息包的指纹特征码,为保证唯一使用uuid |
bridge | boolean | 此字段暂时不用,默认传false |
typeu | int | 客户端发送消息类型,0为单聊,1为群聊 , 非通用数据类型默认传-1 |
type(type类型如下) | int | 消息的类型 |
from | string | 发送者的userId |
to | string | 接受者的userId或groupId |
sendTs | long | 消息的发送时间戳,由服务端生成,客户端默认不传此字段 |
dataContent | string | 协议数据内容,登录消息,ack,聊天信息等内容放在dataContent中传入 |
//dataContent消息内容,内容为文本时为本身,为文件时由应用层定义规则并解析,比如定义为`${fp}|${fileName}|${fileType}|${fileKey}`,
//解析为
const paramArray = dataContent.split('|');
return {
fp: paramArray[0] || '',
name: paramArray[1] || '',
type: paramArray[2] || DataType.TEXT,
url: paramArray[3] || ''
};
export enum DataType {
TEXT = 'TEXT',
IMAGE = 'IMAGE',
AUDIO = 'AUDIO',
FILE = 'FILE'
}
type类型 | description |
---|---|
0 | 客户端登录 |
1 | 心跳包 |
2 | 通用数据 |
3 | 客户端退出登录 |
4 | Qos机制中的消息应答包 |
5 | C2S的回显指令,此指令目前仅用于测试 |
type类型 | description |
---|---|
50 | 响应客户端登录 |
51 | 响应客户端的心跳包 |
52 | 反馈给客户端的错误信息服务端错误类型 |
53 | 反馈回显指令给客户端 |
54 | Qos机制中的消息应答包 |
2 | 转发客户端的通用数据 |
parameter | type | description |
---|---|---|
errorCode | int | error code |
errorMsg | string | error msg |
服务端返测错误内容放在dataContent中
errorCode | errorMsg | description |
---|---|---|
301 | 本次发送的数据内容返回给客户端 | 客户端尚未登录请重新登录 |
302 | 本次发送的数据内容返回给客户端 | 服务器繁忙,降低发送频率 |
303 | group not exists | 群聊指定的groupId不存在 |
COMMON_CODE_OK = 0,
COMMON_NO_LOGIN = 1,
COMMON_UNKNOW_ERROR = 2,
COMMON_DATA_SEND_FAILD = 3,
COMMON_INVALID_PROTOCAL = 4,
BREOKEN_CONNECT_TO_SERVER = 201,
BAD_CONNECT_TO_SERVER = 202,
CLIENT_SDK_NO_INITIALED = 203,
LOCAL_NETWORK_NOT_WORKING = 204,
TO_SERVER_NET_INFO_NOT_SETUP = 205,
RESPONSE_FOR_UNLOGIN = 301,
FROM_CLIENT_TYPE_OF_LOGIN = 0,
FROM_CLIENT_TYPE_OF_KEEP$ALIVE = 1,
FROM_CLIENT_TYPE_OF_COMMON$DATA = 2,
FROM_CLIENT_TYPE_OF_LOGOUT = 3,
FROM_CLIENT_TYPE_OF_RECIVED = 4,
FROM_CLIENT_TYPE_OF_ECHO = 5,
FROM_SERVER_TYPE_OF_RESPONSE$LOGIN = 50,
FROM_SERVER_TYPE_OF_RESPONSE$KEEP$ALIVE = 51,
FROM_SERVER_TYPE_OF_RESPONSE$FOR$ERROR = 52,
FROM_SERVER_TYPE_OF_RESPONSE$ECHO = 53,
FROM_SERVER_TYPE_OF_RESPONSE$RECIVED = 54