dao-im-sdk
v1.0.4
Published
基于WebSocket的封装
Downloads
3
Readme
dao-im-sdk guide
Install&Usage (安装&使用)
# Install(安装)
npm install --save dao-im-sdk
# Usage(使用)
//浏览器
<script src="//unpkg.com/[email protected]/index.js"></script>
<script> console.log(imsdk);</script>
//ES6
import imsdk from 'dao-im-sdk'
// commonjs
const imsdk = require('dao-im-sdk')
发送消息格式
{
"code": "USER_INFO", # 事件码(必填项)
"data": "xxxxxxx", # 发送给服务器数据(aes加密)
"mes": "获取用户信息" # 操作说明
}
返回消息格式
{
"code": "USER_INFO", # 事件码
"data": "xxxxxxxxx", # 响应的数据(first为true时使用ras解密,否则aes解密)
"first": false, # 是否是创建连接以来第一次响应数据
"mes": "获取用户信息",# 提示信息(status 为false时可能需要展示给用户看)
"status": true # 本次操作状态 true成功,false失败
}
Api 使用指南
imsdk类,IM即时通讯SDK.
new imsdk(url, wsUrl, wsConfig, pingTimeout, pongTimeout, reconnectTimeout, pingMsg, repeatLimit, isEncrypt, theme)
options 传入参数
| Name| Type| Description| | :--|:--|:--| | url | String | http链接地址.| | wsUrl | String | websocket链接地址.| | wsConfig | Object | websocket 参数配置.| | pingTimeout | Number | 未收到消息多少秒之后发送ping请求,默认15000毫秒.| | pongTimeout | Number | 发送ping之后,未收到消息超时时间,默认10000毫秒.| | reconnectTimeout | Number | 重连等待时间,默认2000毫秒.| | pingMsg | String | 心跳检测默认值,默认ping.| | repeatLimit | Number | 最大重连次数.| | isEncrypt | Boolean | 是否启用RSA/AES加密(注意:启用需要后端配合开发).| | theme| Object | 主题皮肤(窗口配置).|
Methods 方法
| Name| Type| Description| | :--|:--|:--| |callback()|Object|callback 操作回调监听(含onmessage、onclose、onopen、onreconnect、onerror等)| |close()|Object|关闭webocket连接| |onclose()|Object|websocket关闭监听| |onerror()|Object|websocket错误监听| |onmessage()|Object|websocket通知消息监听| |onopen()|Object|websocket打开监听| |onreconnect()|Object|websocket断线重连监听| |onSend()|Object|websocket 发送消息方法(传入Object(固定格式的参数))| |setAesIv(iv)|String|设置AES偏移量(默认为ABCDEF1234123412)| |setAesKey(key)|String|设置aes密钥| |setRsaPrivateKey(key)|String|设置rsa私钥| |setRsaPublicKey(key)|String|设置rsa公钥| |formatData()|Object|解析onMessage Data接受的数据(后端websocket推送的内容解密)| |formatDataSend()|Object|编码onSend Data发送的数据(前端websocket推送的内容加密)| |getRSAWsConfig()|String|获取ws配置的RSA加密串(根据wsConfig传入的参数生成RSA加密串)| |getRSAWsConfigBase64()|String|获取ws配置的RSA加密串base64编码(根据wsConfig传入的参数生成RSA加密串(进行BASE64编码))|
传入参数
//zd 0:小程序 1:PC 2:手机WEB -1:银行端APP
//lx 1:企业用户, 2:个人用户,3:银行, 4:平台客服
//ws://20.168.1.234:8085/ws?p=(sessionId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&zd=1&lx=1)
//--------------------------------------------
var mesMap = {
PING_PONG: "检测心跳",
NEW_MESSAGE: "新消息",
USER_INFO: "获取用户信息",
READ_MESSAGE: "读消息",
SEND_MESSAGE: "发送消息",
UPDATE_KEY: "更新rsa key",
SERVER_ERROR: "服务器错误",
HISTORY_LIST: "获取历史会话列表",
REMOVE_MESSAGE: "移除会话消息",
RECEIVE_MESSAGE_STATUS: "消息状态",
HISTORY_MESSAGE_LIST: "获取历史消息列表",
UNREAD_MESSAGE_TOTAL: "获取该用户未读消息总数",
};
//初始化实例
let im = new imsdk({
isEncrypt:true,
wsUrl:"ws://127.0.0.1:3001",
wsConfig: {
zd: -1,
lx: 1,
token: "66a33a46-5031-42bd-b624-8460036d28e6",
t: new Date().getTime(),
}
});
im.callback = function (e) {
console.log("callback监听()=>", e);
if(e.event==="onmessage"){
console.log("onmessage=>",e.data)
}else{
console.log("callback=>",e)
}
}
// 初始化更新
if (event === "onmessage" && data.code != "PING_PONG") {
for (const i in mesMap) {
if (mesMap.hasOwnProperty(i)) {
const el = mesMap[i];
if (data.code === "UPDATE_KEY") {
im.setAesKey(data.data);
}
if (data.code === i) {
console.log("【" + el + "=>】", data.data || null);
}
}
}
}
# 下面无关紧要的代码
//自动生成事件绑定
var getId = function (id) {
return document.getElementById(id);
};
var html = "";
for (const i in mesMap) {
if (mesMap.hasOwnProperty(i)) {
const el = mesMap[i];
html +=
'<button style="margin-bottom:10px" id="' +
i +
'">' +
el +
"</button></br>";
}
}
getId("examples").innerHTML = html;
var btns = getId("examples").querySelectorAll("button");
for (let i = 0; i < btns.length; i++) {
btns[i].onclick = function (e) {
// console.log(e.target.id, e.target.innerHTML);
var code = e.target.id;
if(code==="pong"){
im.onSend("pong");
}
im.onSend({
code: code,
data: { text: e.target.innerHTML },
mes: "",
//user:code!="PING_PONG" && "MqZNRtRIS0K7Al13SbBXSQ==" || "" //无关紧要的代码
});
};
}