# CSocket
**Repository Path**: android_common_library/CSocket
## Basic Information
- **Project Name**: CSocket
- **Description**: android轻量级客户端socket
- **Primary Language**: Android
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2020-01-08
- **Last Updated**: 2022-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# CSocket使用文档
### 1.简介
Android端轻量级socket通信客户端,采用aidl通信方式。支持websocket方式或原始socket方式通信,支持同时开启多个socket或websocket连接。

### 2.特性
* [x] 采用aidl跨进程通信方式。
* [x] 支持socket通信和websocket通信。
* [x] 支持同时开启多个socket或websocket通信。
* [x] 支持socket通信自定义通信协议解析格式。
* [x] 支持socket断开重连。
* [x] 支持开发者自定义socket通信协议解析。
* [x] 内置简单的心跳定时器。
* [x] 默认实现基于okhttp的websocket。
* [x] 默认实现基于java阻塞的socket。
* [x] 内置json帧解码器。`socket`
* [x] 内置换行符(\r\n|\n)帧解码器。`socket`
### 3.使用方式
1. 拷贝工程或者编译好的jar包到项目中。
```
//使用websocket需要引入okhttp的jar包
implementation 'com.squareup.okhttp3:okhttp:4.7.2'
//使用原生socket需要引入以下jar
implementation 'io.netty:netty-buffer:4.1.51.Final'
//引入netty-buffer时,需要在build.gradle中添加如下配置,防止编译报错
android{
packagingOptions {
exclude 'META-INF/io.netty.versions.properties'
}
}
```
2. 注册清单配置 `androidManifest.xml`
```
```
3. 初始化socket服务
```
CSocket.getInstance().init(context, new CSocket.OnServiceListener() {
@Override
public void onBindSuccess() {
Log.i(TAG, "===>onBindSuccess");
startSocket();
}
@Override
public void onBindError() {
Log.i(TAG, "===>onBindError");
}
@Override
public void onUnBind() {
Log.i(TAG, "===>onUnBind");
}
});
private void startSocket() {
ClientConfig connConfig = new ClientConfig("default");
connConfig.setFrameworkType(SocketFrameworkType.SOCKET_JAVA_BLOCK);
connConfig.setWebsocketUrl("ws://172.16.11.20:9802");
connConfig.setReconnectInterval(2000);
connConfig.setSocketUrl("192.168.22.110:9802");
connConfig.setClientId("ws-test");
//配置心跳定时器
DogManager.getInstance().setDog(new ErhaDog(this)).setDogListener(new DogFather.DogListener() {
@Override
public void lookup(int count, int maxCount) {
Log.i(TAG, "ping====>" + count + "#" + maxCount);
CSocket.getInstance().sendMessage("ws-test", buildHeartbeat().toString());
}
});
CSocket.getInstance().start(connConfig, new OnCSocketListener() {
@Override
public void onOpen(String channelId, byte[] response) {
Log.i(TAG, "onOpen====>" + channelId);
DogManager.getInstance().lookup();
}
@Override
public void onMessage(String channelId, String message) {
Log.i(TAG, "onMessage====>" + channelId + "#" + message);
DogManager.getInstance().feedDog();
}
@Override
public void onFailure(String channelId, String exceptionClass, String msg) {
super.onFailure(channelId, exceptionClass, msg);
Log.e(TAG, "onFailure====>" + channelId + "#" + exceptionClass + "#" + msg);
}
@Override
public void onReconnecting(String clientId, int count) {
Log.e(TAG, "onReconnecting====>" + clientId + "#" + count);
}
});
}
```
4. 清除socket服务
```
DogManager.getInstance().goHome();
CSocket.getInstance().release();
```
### 4.内置socket实现 `SocketFrameworkType`
|类型|描述|是否可用|
|:--------:|:----------:|:--------:|
|SOCKET_JAVA_BLOCK|原生java阻塞socket(tcp)通信类型|可用|
|SOCKET_JAVA_NIO|原生java阻塞socket(tcp)通信类型|未实现|
|WEBSOCKET_OKHTTP|基于okhttp实现的websocket通信类型|可用|
### 5.配置属性`ClientConfig`
|字段|描述|
|:--------:|:----------:|
| clientId | 自定义通道唯一编码(多客户端时根据该编码进行分发)|
| socketUrl | socket连接地址|
| websocketUrl| websocket连接地址|
| isAutoReconn| 是否自动重连,默认开启|
| reconnectInterval| 重连自增步长,默认10s(单位ms)|
| reconnectMaxTime | 最大重连间隔,默认2min(单位ms)|
|frameworkType|使用的socket框架类型|
|decodeMaxLength|原生socket通信帧缓存buf数组最大长度,默认1024字节|
|decodeClsName|原生socket数据解码器配置,默认使用LineBasedFrameDecoder|
### 7.代码混淆
```
-keep class com.bobo.mm.**{*;}
```