rtm-fpnn-webjs-sdk v1.0.4
fpnn rtm sdk websocket
- 不支持
FPNN加密链接, 支持SSL加密链接 - 支持源码方式接入, 支持自定义构建
关于三方包依赖
- fpnn
./libs/fpnn.min.js - md5
./libs/md5.min.js - msgpack
./libs/msgpack.min.js - Int64BE
./libs/int64.min.js
Promise支持
- 支持动态转Promise接口
- 参考:Promise.promisifyAll
关于编译
- 支持源码编译详见:
./webpack.config.js./package.json - 编译依赖的模块
babel-loaderbabel-preset-es2015webpackwebpack-cli - 编译内置的模块
buffer
yarn run build一个例子
- 参考
./test/index.html./test/test-rtm.js打开浏览器console输出
<script src="../libs/md5.min.js"></script>
<script src="../libs/int64.min.js"></script>
<script src="../libs/msgpack.min.js"></script>
<script src="../libs/fpnn.min.js"></script>
<script src="../libs/rtm.min.js"></script>let client = new rtm.RTMClient({
dispatch: 'rtm-nx-front.ifunplus.cn:13325',
uid: new rtm.RTMConfig.Int64(0, 654321),
token: '5C65CD872903AAB37211EC468B4A1364',
autoReconnect: false,
connectionTimeout: 10 * 1000,
pid: 1000012,
ssl: true,
proxyEndpoint: 'highras.ifunplus.cn:13556',
});
client.on('error', function(err) {
console.error(err);
});
client.on('close', function() {
console.log('closed!');
});
client.on('login', function(data) {
if (data.error) {
console.error(data.error);
// need to get new token
return;
}
//send to server
client.sendMessage(new rtm.RTMConfig.Int64(123789), 8, 'hello !', '', new rtm.RTMConfig.Int64(0), 10 * 1000, function(err, data) {
if (err) {
if (err.hasOwnProperty('mid')) {
console.error('\n mid:' + err.mid.toString(), err.error);
return;
}
console.error('\n ', err);
}
if (data) {
if (data.hasOwnProperty('mid')) {
console.log('\n mid:' + data.mid.toString(), data.payload);
return;
}
console.log('\n ', data);
}
});
});
//push service
let pushName = rtm.RTMConfig.SERVER_PUSH.recvMessage;
client.processor.on(pushName, function(data) {
console.log('\n[PUSH] ' + pushName + ':\n', data);
// console.log(data.mid.toString());
});
client.login();
// destroy
// client.destroy();Events
event:login: 登陆data.endpoint: (string) 当前连接的RTMGate地址, 可在本地缓存, 下次登陆可使用该地址以加速登陆过程, 每次登陆成功需更新本地缓存data.error: (object) auth失败, token失效需重新获取
error: 异常err: (Error)
close: 连接关闭retry: (bool) 是否自动重连
PushService
请参考 RTMConfig.SERVER_PUSH 成员
kickout: RTMGate主动断开data: (object)
kickoutroom: RTMGate主动从Room移除data.rid: (Int64) Room id
ping: RTMGate主动pingdata: (object)
pushmsg: RTMGate主动推送P2P消息data.from: (Int64) 发送者 iddata.mtype: (number) 消息类型data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 消息内容data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushgroupmsg: RTMGate主动推送Group消息data.from: (Int64) 发送者 iddata.gid: (Int64) Group iddata.mtype: (number) 消息类型data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 消息内容data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushroommsg: RTMGate主动推送Room消息data.from: (Int64) 发送者 iddata.rid: (Int64) Room iddata.mtype: (number) 消息类型data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 消息内容data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushbroadcastmsg: RTMGate主动推送广播消息data.from: (Int64) 发送者 iddata.mtype: (number) 消息类型data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 消息内容data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushfile: RTMGate主动推送P2P文件data.from: (Int64) 发送者 iddata.mtype: (number) 文件类型, 请参考RTMConfig.FILE_TYPE成员data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 文件获取地址(url)data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushgroupfile: RTMGate主动推送Group文件data.from: (Int64) 发送者 iddata.gid: (Int64) Group iddata.mtype: (number) 文件类型, 请参考RTMConfig.FILE_TYPE成员data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 文件获取地址(url)data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushroomfile: RTMGate主动推送Room文件data.from: (Int64) 发送者 iddata.rid: (Int64) Room iddata.mtype: (number) 文件类型, 请参考RTMConfig.FILE_TYPE成员data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 文件获取地址(url)data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
pushbroadcastfile: RTMGate主动推送广播文件data.from: (Int64) 发送者 iddata.mtype: (number) 文件类型, 请参考RTMConfig.FILE_TYPE成员data.mid: (Int64) 消息 id, 当前链接会话内唯一data.msg: (string) 文件获取地址(url)data.attrs: (string) 发送时附加的自定义内容data.mtime: (Int64) 消息入库 id
API
constructor(options): 构造RTMClientoptions.dispatch: (Optional | string) Dispatch服务地址, RTM提供options.pid: (Required | number) 应用编号, RTM提供options.uid: (Required | Int64) 用户IDoptions.token: (Required | string) 用户登录Token, RTM提供options.autoReconnect: (Optional | bool) 是否自动重连, 默认:falseoptions.connectionTimeout: (Optional | number) 超时时间(ms), 默认:30 * 1000options.version: (Optional | string) 服务器版本号, RTM提供options.attrs: (Optional | objectstring, string) 设置用户端信息, 保存在当前链接中, 客户端可以获取到options.ssl: (Optional | string) 是否开启SSL加密, 若开启需设置代理地址 默认:trueoptions.platformImpl: (Optional | Object) 平台相关接口注入, 默认:new BrowserImpl()options.proxyEndpoint: (Optional | string) 若开启SSL加密, 需设置代理地址, 测试代理:highras.ifunplus.cn:13550
processor: (RTMProcessor) 监听PushService的句柄login(endpoint, ipv6): 连接并登陆endpoint: (Optional | string) RTMGate服务地址, 由Dispatch服务获取, 或由RTM提供ipv6: (Optional | bool) 是否为IPV6地址格式, 默认:false
destroy(): 断开连接并开始销毁sendMessage(to, mtype, msg, attrs, mid, timeout, callback): 发送消息to: (Required | Int64) 接收方uidmtype: (Required | number) 消息类型msg: (Required | string) 消息内容attrs: (Required | string) 消息附加信息, 没有可传''mid: (Optional | Int64) 消息 id, 用于过滤重复消息, 非重发时为Int64(0)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (objectmid:Int64, error:Error)data: (object[mid:Int64, payload:objectmtime:Int64])
sendGroupMessage(gid, mtype, msg, attrs, mid, timeout, callback): 发送group消息gid: (Required | Int64) group idmtype: (Required | number) 消息类型msg: (Required | string) 消息内容attrs: (Required | string) 消息附加信息, 可传''mid: (Optional | Int64) 消息 id, 用于过滤重复消息, 非重发时为Int64(0)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (objectmid:Int64, error:Error)data: (object[mid:Int64, payload:objectmtime:Int64])
sendRoomMessage(rid, mtype, msg, attrs, mid, timeout, callback): 发送room消息rid: (Required | Int64) room idmtype: (Required | number) 消息类型msg: (Required | string) 消息内容attrs: (Required | string) 消息附加信息, 可传''mid: (Optional | Int64) 消息 id, 用于过滤重复消息, 非重发时为Int64(0)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (objectmid:Int64, error:Error)data: (object[mid:Int64, payload:objectmtime:Int64])
getUnreadMessage(timeout, callback): 检测未读消息数目timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[p2p:objectstring, number, group:objectstring, number]) 对应值为未读消息数目
cleanUnreadMessage(timeout, callback): 清除未读消息timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
getSession(timeout, callback): 获取所有会话timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[p2p:objectstring, Int64, group:objectstring, Int64]) 对应值为最后一次会话的UTC时间戳
getGroupMessage(gid, desc, num, begin, end, lastid, timeout, callback): 获取Group历史消息gid: (Required | Int64) Group iddesc: (Required | bool)true: 则从end的时间戳开始倒序翻页,false: 则从begin的时间戳顺序翻页num: (Required | number) 获取数量, 一次最多获取20条, 建议10条begin: (Optional | Int64) 开始时间戳, 毫秒, 默认0, 条件:>=end: (Optional | Int64) 结束时间戳, 毫秒, 默认0, 条件:<=lastid: (Optional | Int64) 最后一条消息的id, 第一次默认传0, 条件:> or <timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[num:number, lastid:Int64, begin:Int64, end:Int64, msgs:arrayGroupMsg])GroupMsg.id(Int64)GroupMsg.from(Int64)GroupMsg.mtype(number)GroupMsg.mid(Int64)GroupMsg.deleted(bool)GroupMsg.msg(string)GroupMsg.attrs(string)GroupMsg.mtime(Int64)
getRoomMessage(rid, desc, num, begin, end, lastid, timeout, callback): 获取Room历史消息rid: (Required | Int64) Room iddesc: (Required | bool)true: 则从end的时间戳开始倒序翻页,false: 则从begin的时间戳顺序翻页num: (Required | number) 获取数量, 一次最多获取20条, 建议10条begin: (Optional | Int64) 开始时间戳, 毫秒, 默认0, 条件:>=end: (Optional | Int64) 结束时间戳, 毫秒, 默认0, 条件:<=lastid: (Optional | Int64) 最后一条消息的id, 第一次默认传0, 条件:> or <timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[num:number, lastid:Int64, begin:Int64, end:Int64, msgs:arrayRoomMsg])RoomMsg.id(Int64)RoomMsg.from(Int64)RoomMsg.mtype(number)RoomMsg.mid(Int64)RoomMsg.deleted(bool)RoomMsg.msg(string)RoomMsg.attrs(string)RoomMsg.mtime(Int64)
getBroadcastMessage(desc, num, begin, end, lastid, timeout, callback): 获取广播历史消息desc: (Required | bool)true: 则从end的时间戳开始倒序翻页,false: 则从begin的时间戳顺序翻页num: (Required | number) 获取数量, 一次最多获取20条, 建议10条begin: (Optional | Int64) 开始时间戳, 毫秒, 默认0, 条件:>=end: (Optional | Int64) 结束时间戳, 毫秒, 默认0, 条件:<=lastid: (Optional | Int64) 最后一条消息的id, 第一次默认传0, 条件:> or <timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[num:number, lastid:Int64, begin:Int64, end:Int64, msgs:arrayBroadcastMsg])BroadcastMsg.id(Int64)BroadcastMsg.from(Int64)BroadcastMsg.mtype(number)BroadcastMsg.mid(Int64)BroadcastMsg.deleted(bool)BroadcastMsg.msg(string)BroadcastMsg.attrs(string)BroadcastMsg.mtime(Int64)
getP2PMessage(ouid, desc, num, begin, end, lastid, timeout, callback): 获取P2P历史消息ouid: (Required | Int64) 获取和哪个用户id的历史消息desc: (Required | bool)true: 则从end的时间戳开始倒序翻页,false: 则从begin的时间戳顺序翻页num: (Required | number) 获取数量, 一次最多获取20条, 建议10条begin: (Optional | Int64) 开始时间戳, 毫秒, 默认0, 条件:>=end: (Optional | Int64) 结束时间戳, 毫秒, 默认0, 条件:<=lastid: (Optional | Int64) 最后一条消息的id, 第一次默认传0, 条件:> or <timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[num:number, lastid:Int64, begin:Int64, end:Int64, msgs:arrayP2PMsg])P2PMsg.id(Int64)P2PMsg.direction(number)P2PMsg.mtype(number)P2PMsg.mid(Int64)P2PMsg.deleted(bool)P2PMsg.msg(string)P2PMsg.attrs(string)P2PMsg.mtime(Int64)
fileToken(cmd, tos, to, rid, gid, timeout, callback): 获取发送文件的tokencmd: (Required | string) 文件发送方式sendfile | sendroomfile | sendgroupfiletos: (Optional | arrayInt64) 接收方 uidsto: (Optional | Int64) 接收方 uidrid: (Optional | Int64) Room idgid: (Optional | Int64) Group idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (objecttoken:string, endpoint:string)
close(): 断开连接addAttrs(attrs, timeout, callback): 设置客户端信息, 保存在当前链接中, 客户端可以获取到attrs: (Required | objectstring, string) key-value形式的变量timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
getAttrs(timeout, callback): 获取客户端信息timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object[attrs:arrayMap)Map.ce(string) 链接的endpoint, 需要让其下线可以调用kickoutMap.login(string) 登录时间, UTC时间戳Map.my(string) 当前链接的attrs
addDebugLog(msg, attrs, timeout, callback): 添加debug日志msg: (Required | string) 调试信息msgattrs: (Required | string) 调试信息attrstimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
addDevice(apptype, devicetoken, timeout, callback): 添加设备, 应用信息apptype: (Required | string) 应用信息devicetoken: (Required | string) 设备信息timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
removeDevice(devicetoken, timeout, callback): 删除设备, 应用信息devicetoken: (Required | string) 设备信息timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
setTranslationLanguage(targetLanguage, timeout, callback): 设置自动翻译的默认目标语言类型, 如果 targetLanguage 为空字符串, 则取消自动翻译targetLanguage: (Required | string) 翻译的目标语言类型timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
translate(originalMessage, originalLanguage, targetLanguage, timeout, callback): 翻译消息originalMessage: (Required | stirng) 待翻译的原始消息originalLanguage: (Optional | string) 待翻译的消息的语言类型, 可为undefinedtargetLanguage: (Required | string) 本次翻译的目标语言类型timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (objectstext:string, src:string, dtext:string, dst:string)
addFriends(friends, timeout, callback): 添加好友friends: (Required | arrayInt64) 多个好友 idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
deleteFriends(friends, timeout, callback): 删除好友friends: (Required | arrayInt64) 多个好友 idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
getFriends(timeout, callback): 获取好友timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (arrayInt64)
addGroupMembers(gid, uids, timeout, callback): 添加group成员gid: (Required | Int64) group iduids: (Required | arrayInt64) 多个用户 idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
deleteGroupMembers(gid, uids, timeout, callback): 删除group成员gid: (Required | Int64) group iduids: (Required | arrayInt64) 多个用户 idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
getGroupMembers(gid, timeout, callback): 获取group成员gid: (Required | Int64) group idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (arrayInt64)
getUserGroups(timeout, callback): 获取用户所在的Grouptimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (arrayInt64)
enterRoom(rid, timeout, callback): 进入房间rid: (Required | Int64) 房间 idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
leaveRoom(rid, timeout, callback): 离开房间rid: (Required | Int64) 房间 idtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
getUserRooms(timeout, callback): 获取用户所在的Roomtimeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (arrayInt64)
getOnlineUsers(uids, timeout, callback): 获取在线用户deleteMessage(mid, xid, type, timeout, callback): 删除消息mid: (Required | Int64) 消息 idxid: (Required | Int64) 消息接收方 id (userId/RoomId/GroupId)type: (Required | number) 接收方类型 (1:p2p, 2:group, 3:room)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
kickout(ce, timeout, callback): 踢掉一个链接 (只对多用户登录有效, 不能踢掉自己, 可以用来实现同类设备唯一登录)ce: (Required | string) 当前链接的endpoint, 可以通过调用getAttrs获取timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
dbGet(key, timeout, callback): 获取存储的数据信息, 返回值不包含val表示key不存在key: (Required | string) 存储数据对应键值, 最长128 字节timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (objectval:string)
dbSet(key, value, timeout, callback): 设置存储的数据信息,value为空则删除对应keykey: (Required | string) 存储数据对应键值, 最长128 字节value: (Optional | string) 存储数据实际内容, 最长1024 * 1024 * 2 字节timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (Error)data: (object)
sendFile(mtype, to, file, mid, timeout, callback): 发送文件mtype: (Required | number) 文件类型to: (Required | Int64) 接收者 idfile: (Required | File) 要发送的文件mid: (Optional | Int64) 消息 id, 用于过滤重复消息, 非重发时为Int64(0)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (objectmid:Int64, error:Error)data: (object[mid:Int64, payload:objectmtime:Int64])
sendGroupFile(mtype, gid, file, mid, timeout, callback): 给Group发送文件mtype: (Required | number) 文件类型gid: (Required | Int64) Group idfile: (Required | File) 要发送的文件mid: (Optional | Int64) 消息 id, 用于过滤重复消息, 非重发时为Int64(0)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (objectmid:Int64, error:Error)data: (object[mid:Int64, payload:objectmtime:Int64])
sendRoomFile(mtype, rid, file, mid, timeout, callback): 给Room发送文件mtype: (Required | number) 文件类型rid: (Required | Int64) Room idfile: (Required | File) 要发送的文件mid: (Optional | Int64) 消息 id, 用于过滤重复消息, 非重发时为Int64(0)timeout: (Optional | number) 超时时间(ms), 默认:20 * 1000callback: (Optional | function) 回调方法,callback(err, data)err: (objectmid:Int64, error:Error)data: (object[mid:Int64, payload:objectmtime:Int64])