添加libs目录方便查找sdk安装包

This commit is contained in:
远方夕阳 2020-10-23 22:44:51 +08:00
parent f3cae76979
commit 7ca79f1fa1
8 changed files with 8150 additions and 1 deletions

View File

@ -27,7 +27,10 @@ CIM项目是基于mina或者netty框架下的推送系统我们平常使用
3.cim-server-sdk 是服务端SDK源码,分为 mina和netty 两个版本,二者任选其一
4.cim-boot-server是springboot服务端工程源码,使用Idea工具开发
4.cim-client-sdk-libs 是打包好的可直接引用的sdk目录
5.cim-boot-server是springboot服务端工程源码,使用Idea工具开发
其中所有的sdk均为IntelliJ IDEA工程Maven打包成jar导出引入到对应的客户端或服务端工程

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,181 @@
/*CIM服务器IP*/
const CIM_HOST = "127.0.0.1";
/*
*服务端 websocket端口
*/
const CIM_PORT = 34567;
const CIM_URI = "ws://" + CIM_HOST + ":" + CIM_PORT;
const APP_VERSION = "1.0.0";
const APP_CHANNEL = "browser";
const APP_PACKAGE = "com.farsunset.cim";
/*
*特殊的消息类型代表被服务端强制下线
*/
const ACTION_999 = "999";
const DATA_HEADER_LENGTH = 1;
const MESSAGE = 2;
const REPLY_BODY = 4;
let socket;
let manualStop = false;
const CIMPushManager = {};
CIMPushManager.connect = function () {
manualStop = false;
window.localStorage.account = '';
socket = new WebSocket(CIM_URI);
socket.cookieEnabled = false;
socket.binaryType = 'arraybuffer';
socket.onopen = CIMPushManager.innerOnConnectFinished;
socket.onmessage = CIMPushManager.innerOnMessageReceived;
socket.onclose = CIMPushManager.innerOnConnectionClosed;
};
CIMPushManager.bindAccount = function (account) {
window.localStorage.account = account;
let deviceId = window.localStorage.deviceIddeviceId;
if (deviceId == '' || deviceId == undefined) {
deviceId = generateUUID();
window.localStorage.deviceId = deviceId;
}
let browser = getBrowser();
let body = new proto.com.farsunset.cim.sdk.web.model.SentBody();
body.setKey("client_bind");
body.setTimestamp(new Date().getTime());
body.getDataMap().set("account", account);
body.getDataMap().set("channel", APP_CHANNEL);
body.getDataMap().set("appVersion", APP_VERSION);
body.getDataMap().set("osVersion", browser.version);
body.getDataMap().set("packageName", APP_PACKAGE);
body.getDataMap().set("deviceId", deviceId);
body.getDataMap().set("device", browser.name);
CIMPushManager.sendRequest(body);
};
CIMPushManager.stop = function () {
manualStop = true;
socket.close();
};
CIMPushManager.resume = function () {
manualStop = false;
CIMPushManager.connect();
};
CIMPushManager.innerOnConnectFinished = function () {
let account = window.localStorage.account;
if (account === '' || account === undefined) {
onConnectFinished();
} else {
CIMPushManager.bindAccount(account);
}
};
CIMPushManager.innerOnMessageReceived = function (e) {
let data = new Uint8Array(e.data);
let type = data[0];
let body = data.subarray(DATA_HEADER_LENGTH, data.length);
if (type == MESSAGE) {
let message = proto.com.farsunset.cim.sdk.web.model.Message.deserializeBinary(body);
onInterceptMessageReceived(message.toObject(false));
return;
}
if (type == REPLY_BODY) {
let message = proto.com.farsunset.cim.sdk.web.model.ReplyBody.deserializeBinary(body);
/**
* 将proto对象转换成json对象去除无用信息
*/
let reply = {};
reply.code = message.getCode();
reply.key = message.getKey();
reply.message = message.getMessage();
reply.timestamp = message.getTimestamp();
reply.data = {};
/**
* 注意遍历map这里的参数 value在前key在后
*/
message.getDataMap().forEach(function (v, k) {
reply.data[k] = v;
});
onReplyReceived(reply);
}
};
CIMPushManager.innerOnConnectionClosed = function (e) {
if (!manualStop) {
let time = Math.floor(Math.random() * (30 - 15 + 1) + 15);
setTimeout(function () {
CIMPushManager.connect();
}, time);
}
};
CIMPushManager.sendRequest = function (body) {
let data = body.serializeBinary();
let protobuf = new Uint8Array(data.length);
protobuf.set(data, 0);
socket.send(protobuf);
};
function onInterceptMessageReceived(message) {
/*
*被强制下线之后不再继续连接服务端
*/
if (message.action == ACTION_999) {
manualStop = true;
}
/*
*收到消息后将消息发送给页面
*/
if (onMessageReceived instanceof Function) {
onMessageReceived(message);
}
}
function getBrowser() {
let explorer = window.navigator.userAgent.toLowerCase();
if (explorer.indexOf("msie") >= 0) {
let ver = explorer.match(/msie ([\d.]+)/)[1];
return {name: "IE", version: ver};
}
else if (explorer.indexOf("firefox") >= 0) {
let ver = explorer.match(/firefox\/([\d.]+)/)[1];
return {name: "Firefox", version: ver};
}
else if (explorer.indexOf("chrome") >= 0) {
let ver = explorer.match(/chrome\/([\d.]+)/)[1];
return {name: "Chrome", version: ver};
}
else if (explorer.indexOf("opera") >= 0) {
let ver = explorer.match(/opera.([\d.]+)/)[1];
return {name: "Opera", version: ver};
}
else if (explorer.indexOf("Safari") >= 0) {
let ver = explorer.match(/version\/([\d.]+)/)[1];
return {name: "Safari", version: ver};
}
return {name: "Other", version: "1.0.0"};
}
function generateUUID() {
let d = new Date().getTime();
let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = (d + Math.random() * 16) % 16 | 0;
d = Math.floor(d / 16);
return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
return uuid.replace(/-/g, '');
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
集成方式请参考文档和cim-use-examples中对应的demo