修改相关文档以及增加js版本的protobuf结构体文件

This commit is contained in:
远方夕阳 2018-08-21 21:10:43 +08:00
parent c85b2ce239
commit 2347fd0e19
15 changed files with 8003 additions and 190 deletions

218
README.md
View File

@ -1,200 +1,48 @@
### 说明:
此开源版本为基础功能版本只有消息推送的基础功能netty版本,和mina版本结构和功能完全一致大家可以选择自己喜欢的或者合适的版本学习或者使用!
### 侣信专业版2.5.0版本发布
### [http://farsunset.com](http://farsunset.com)
#### 项目介绍
CIM是一套基于apache mina和Netty框架下的推送系统平时我们一直使用第三方的推送SDK比如极光百度推送小米推送以及腾讯信鸽等来支撑自己的移动端的业务或许有一些企业有着自己一套即时通讯系统的需求那么CIM为您提供了一个解决方案目前CIM支撑 webcoksetandroidios桌面应用系统应用等多端接入支持CIM服务端使用springboot搭建仅仅拥有消息推送的功能关于数据缓存与持久化都需要使用者自己开发并且配备了比较完整的使用文档。希望能为您带来一些价值。
### 前言:
#### 目录说明
现在市面上有很多 xmpp协议的即时通讯方案openfire androidpn等等。它们都是使用了apache mina开发但是这些东西基本都需要二次改造开发。而且改动还很大我也看过这些东西的源码发现代码结构不太理想耦合的情况太多实在不好扩展。所谓XMPP 协议。只不过是别人使用mina 自定义了一个消息编码解码协议。通俗的讲就是xml形式消息的编码与解码我们完全没有必要在国外这套不成熟的openfire 与xmpp 上耗费过多的精力去研究我们完全可以通过apache mina 自定义自己的通讯协议,并可以为它使用自己的名字。我们不要盲目崇拜国外的有些东西,自己掌握原理,才是最重要的,各位切记~
这套IM系统为我个人自主开发 使用了 apache mina ,主要功能为 服务端和客户端,客户端 到客户端的即时通信,可以支持包括文字 图片,语音等任何消息形式 服务端使用的 struts2+spring3和 apache mina android端 也使用的apache mina。这套IM系统结构还是非常清晰合理的非常容易扩展和改造下面是android版本 的 demo的目的是只是一个演示 ,可以参照它的代码,使用这套系统开发自己的东西,核心价值是一套高灵活性,相对标准化的即时通讯解决方案,即时聊天只是它的一种运用途径!
1. cim_for_mina目录下为mina版本实现
2. cim_for_netty目录下为netty版本实现
3. doc目录中是相关使用文档以及protubuf结构体文件
5. cim-android-sdk 是android客户端封装的的jar包
6. cim-java-sdk 是java版客户端封装的的jar包
7. cim-server-sdk 是cim-server 用到的封装的jar
8. cim-boot-server是springboot服务端工程是eclipse4.x基于gradle构建插件
9. cim-client-android 是android客户端 android studio工具
10. 说明.txt是服务端环境搭建说明
### 服务端集群配置方案
## 服务端修改
1.多台服务器集群配置首先需要重写SessionManager接口(参考com.farsunset.ichat.cim.session.ClusterSessionManager.java)用户登录时将账号和服务器IP 存入数据库中,这样就可以统计各台服务器接受的连接数量。
2.客户端连接服务器时,服务端为客户端动态分配 服务器IP每次分配 较为空闲的服务器IP
3.服务端接受消息后 通过接收者账号查询出对应的Iosession和 登录的 服务器IP然后将消息信息传往目标服务器处理发送
#### 建议反馈
智者千虑必有一失如果再使用中发现任何问题或者有优化建议您可以通过QQ3979434或者 邮箱3979434@qq.com向我反馈当然目前还缺少IOS客户端sdk和.net客户端SDK如果您有兴趣可以参与开发CIM将会越来越好。
### 客户端端修改
1.客户端登录时将不在是固定的服务器IP 而是先通过http接口获取到当前空闲的服务器IP然后登录
#### 相关项目
### 成功案例
### http://blog.csdn.net/xx753277/article/details/17512255
### http://blog.csdn.net/xx753277/article/details/45535981
侣信专业版是基于CIM面向中小企业和者各类团队组织内部交流使用工具。具有丰富的功能聊天群组部门组织内部朋友圈等功能。它可以在局域网内使用保证沟通的信息安全并且它是完全免费的而且可以及时获得更新。
#### [http://farsunset.com](http://farsunset.com)
#### 功能预览
### 客户端接收消息
![image](http://staticres.oss-cn-hangzhou.aliyuncs.com/cim-android_client.png)
### 服务端消息 web入口
### http://192.168.1.11:8080/ichat-server
1.控制台页面
![image](http://staticres.oss-cn-hangzhou.aliyuncs.com/cim-server.png)
2.Android客户端
![image](http://staticres.oss-cn-hangzhou.aliyuncs.com/cim-android_client.png)
3.Web客户端
![image](http://staticres.oss-cn-hangzhou.aliyuncs.com/cim-server-message.png)
#### 更新日志
-------------------------------------------------------------------------------------------
版本:3.5.0/时间:2018-08-22
1.服务端由原来的 spring+struts2修改为springboot工程
2.全面重新websocket的实现全面拥抱protobuf替换josn序列化方式更加高效
### 常用功能接口
所有开放外部接口都集中在
com.farsunset.cim.client.android.CIMPushManager
#### 1.1连接服务器
```java
/**
* 初始化,连接服务端,在程序启动页或者 在Application里调用
* @param context
* @param ip
* @param port
*/
public static void connect(Context context,String ip,int port)
//示例
CIMPushManager.connect(context,"125.12.35.231",28888);
```
#### 1.2绑定账号到服务端
```java
/**
* 设置一个账号登录到服务端
* @param account 用户唯一ID
*/
public static void bindAccount(Context context,String account)
//示例
CIMPushManager.bindAccount(context,"xiyang");
```
#### 1.3发送一个CIM请求
酌情使用此功能可用http接口替代
```java
/**
* 发送一个CIM请求
* @param context
* @param body 请求体的结构
*/
public static void sendRequest(Context context,SentBody body)
//示例:获取离线消息
SentBody sent = new SentBody();
sent.setKey(CIMConstant.RequestKey.CLIENT_OFFLINE_MESSAGE);
sent.put("account", "xiyang");
CIMPushManager.sendRequest(context, sent);
//该功能需要服务端实现详情参考服务端PullOflineMessageHandler.java
```
#### 1.4停止接收消息
```java
/**
* 停止接受推送,将会退出当前账号登录,端口与服务端的连接
* @param context
*/
public static void stop(Context context)
//示例:
CIMPushManager.stop(context);
```
#### 1.5恢复接收消息
```java
/**
* 重新恢复接收推送,重新连接服务端,并登录当前账号
* @param context
*/
public static void resume(Context context)
//示例:
CIMPushManager.resume(context);
```
#### 1.6完全销毁连接
```java
/**
* 完全销毁CIM一般用于完全退出程序调用resume将不能恢复
* @param context
*/
public static void destroy(Context context)
//示例:
CIMPushManager.destroy(context);
```
#### 1.7获取是否与服务端连接正常
```java
/**
*
* @param context
*/
public boolean isConnected(Context context)
//示例:
CIMPushManager.isConnected(context);
```
#### 1.8获取PushManager状态
```java
//被销毁的destroy()
CIMPushManager.STATE_DESTROYED = 0x0000DE;
//被销停止的 stop()
CIMPushManager.STATE_STOPED = 0x0000EE;
CIMPushManager.STATE_NORMAL = 0x000000;
public int getState(Context context)
//示例:
CIMPushManager.getState(context);
```
#### 1.9推送消息以及相关事件的接收
首先注册一个广播并监听以下action 参照 后面androidManifest.xml配置
参考CustomCIMMessageReceiver的实现
```java
/**
* 当收到服务端推送过来的消息时调用
* @param message
*/
public abstract void onMessageReceived(Message message);
/**
* 当调用CIMPushManager.sendRequest()向服务端发送请求,获得相应时调用
* @param replybody
*/
public abstract void onReplyReceived(ReplyBody replybody);
/**
* 当手机网络发生变化时调用
* @param networkinfo
*/
public abstract void onNetworkChanged(NetworkInfo networkinfo);
/**
* 当连接服务器成功时回调
* @param hasAutoBind : true 已经自动绑定账号到服务器了不需要再手动调用bindAccount
*/
public abstract void onConnectionSuccessed(boolean hasAutoBind);
/**
* 当断开服务器连接的时候回调
*/
public abstract void onConnectionClosed();
/**
* 当服务器连接失败的时候回调
*
*/
public abstract void onConnectionFailed(Exception e);
```

Binary file not shown.

View File

@ -0,0 +1 @@
使用protoc命令 编译成对应的java文件编译之前可以自行修改proto文件中的类名包名信息

View File

@ -0,0 +1,14 @@
syntax = "proto3";
package com.farsunset.cim.sdk.web.model;
message Message {
string mid = 1;
string action = 2;
string content = 3;
string sender = 4;
string receiver = 5;
string extra = 6;
string title = 7;
string format = 8;
int64 timestamp = 9;
}

View File

@ -0,0 +1,11 @@
syntax = "proto3";
package com.farsunset.cim.sdk.web.model;
message ReplyBody {
string key = 1;
string code = 2;
string message = 3;
int64 timestamp =4;
map<string,string> data =5;
}

View File

@ -0,0 +1,10 @@
syntax = "proto3";
package com.farsunset.cim.sdk.web.model;
message SentBody {
string key = 1;
int64 timestamp =2;
map<string,string> data =3;
}

2728
doc/proto/js/message.js Normal file

File diff suppressed because it is too large Load Diff

2622
doc/proto/js/replybody.js Normal file

File diff suppressed because it is too large Load Diff

2568
doc/proto/js/sentbody.js Normal file

File diff suppressed because it is too large Load Diff

4
doc/proto/js/说明.txt Normal file
View File

@ -0,0 +1,4 @@
.js文件是已经编译好的 proto 的js文件
.proto文件是protobuf的源文件如果需要可以自己修改内容重新编译成js文件
编译教程参见
https://blog.csdn.net/arvin_kai/article/details/77532595

View File

@ -1,6 +1,13 @@
1.cim-android-sdk 是android客户端封装的的jar包
2.cim-java-sdk 是java版客户端封装的的jar包
3.cim-server-sdk 是cim-server 用到的封装的jar
4.cim-server是 java web工程用eclipse开发工具
4.cim-boot-server是spring boot 服务端工程是eclipse4.x 基于gradle jar包管理工具(最新版Eclipse可能已经包含了gradle插件如果没有可以自行安装)
5.cim-client-android 是android客户端 android studio工具
6.将不再维护flash版本 sdk,有兴趣的可以自己修改原来的flash 版本源码
-----------------服务端搭建---------------------------
1 安装jdk1.8
2 Eclipse最新版本(下载地址:http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neon2)
导入lvxin-boot-server
Eclipse的Gradle插件地址
https://github.com/eclipse/buildship/blob/master/docs/user/Installation.md