package com.easysocket.config;
|
|
import com.easysocket.connection.reconnect.AbsReconnection;
|
import com.easysocket.connection.reconnect.DefaultReConnection;
|
import com.easysocket.entity.SocketAddress;
|
import com.easysocket.interfaces.config.IMessageProtocol;
|
|
import java.nio.ByteOrder;
|
|
/**
|
* Author:Alex。
|
* Date:2019/5/31。
|
* Note:socket相关配置。
|
*/
|
public class EasySocketOptions {
|
|
/**
|
* 是否调试模式
|
*/
|
private static boolean isDebug = true;
|
/**
|
* 主机地址
|
*/
|
private SocketAddress socketAddress;
|
/**
|
* 备用主机地址
|
*/
|
private SocketAddress backupAddress;
|
/**
|
* 写入Socket管道的字节序
|
*/
|
private ByteOrder writeOrder;
|
/**
|
* 从Socket读取字节时的字节序
|
*/
|
private ByteOrder readOrder;
|
/**
|
* 从socket读取数据时遵从的数据包结构协议,在业务层进行定义
|
*/
|
private IMessageProtocol messageProtocol;
|
/**
|
* 写数据时单个数据包的最大值
|
*/
|
private int maxWriteBytes;
|
/**
|
* 读数据时单次读取最大缓存值,数值越大效率越高,但是系统消耗也越大
|
*/
|
private int maxReadBytes;
|
/**
|
* 心跳频率/毫秒
|
*/
|
private long heartbeatFreq;
|
/**
|
* 心跳最大的丢失次数,大于这个数据,将断开socket连接
|
*/
|
private int maxHeartbeatLoseTimes;
|
/**
|
* 连接超时时间(毫秒)
|
*/
|
private int connectTimeout;
|
/**
|
* 服务器返回数据的最大值(单位Mb),防止客户端内存溢出
|
*/
|
private int maxResponseDataMb;
|
/**
|
* socket重连管理器
|
*/
|
private AbsReconnection reconnectionManager;
|
/**
|
* 安全套接字相关配置
|
*/
|
private SocketSSLConfig easySSLConfig;
|
/**
|
* socket工厂
|
*/
|
private SocketFactory socketFactory;
|
/**
|
* 实现回调功能需要callbackID,而callbackID是保存在发送消息和应答消息中的,此工厂用来获取socket消息中
|
* 保存callbackID值的key,比如json格式中的key-value中的key
|
*/
|
private CallbackIDFactory callbackIDFactory;
|
/**
|
* 请求超时时间,单位毫秒
|
*/
|
private long requestTimeout;
|
/**
|
* 是否开启请求超时检测
|
*/
|
private boolean isOpenRequestTimeout;
|
|
/**
|
* IO字符流的编码方式,默认utf-8
|
*/
|
private String charsetName;
|
|
public boolean isDebug() {
|
return isDebug;
|
}
|
|
|
/**
|
* 静态内部类
|
*/
|
public static class Builder {
|
EasySocketOptions socketOptions;
|
|
// 首先获得一个默认的配置
|
public Builder() {
|
this(getDefaultOptions());
|
}
|
|
public Builder(EasySocketOptions defaultOptions) {
|
socketOptions = defaultOptions;
|
}
|
|
/**
|
* 设置socket 主机地址
|
*
|
* @param socketAddress
|
* @return
|
*/
|
public Builder setSocketAddress(SocketAddress socketAddress) {
|
socketOptions.socketAddress = socketAddress;
|
return this;
|
}
|
|
/**
|
* 设置备用的主机地址
|
*
|
* @param backupAddress
|
* @return
|
*/
|
public Builder setBackupAddress(SocketAddress backupAddress) {
|
socketOptions.backupAddress = backupAddress;
|
return this;
|
}
|
|
/**
|
* 设置是否开启请求超时的检测
|
*
|
* @param openRequestTimeout
|
* @return
|
*/
|
public Builder setOpenRequestTimeout(boolean openRequestTimeout) {
|
socketOptions.isOpenRequestTimeout = openRequestTimeout;
|
return this;
|
}
|
|
/**
|
* 设置请求超时时间
|
*
|
* @param requestTimeout 毫秒
|
* @return
|
*/
|
public Builder setRequestTimeout(long requestTimeout) {
|
socketOptions.requestTimeout = requestTimeout;
|
return this;
|
}
|
|
/**
|
* 设置请求ack的工厂
|
*
|
* @param callbackIDFactory
|
*/
|
public Builder setCallbackIDFactory(CallbackIDFactory callbackIDFactory) {
|
socketOptions.callbackIDFactory = callbackIDFactory;
|
return this;
|
}
|
|
|
/**
|
* 设置写数据的字节顺序
|
*
|
* @param writeOrder
|
* @return
|
*/
|
public Builder setWriteOrder(ByteOrder writeOrder) {
|
socketOptions.writeOrder = writeOrder;
|
return this;
|
}
|
|
/**
|
* 设置读数据的字节顺序
|
*
|
* @param readOrder
|
* @return
|
*/
|
public Builder setReadOrder(ByteOrder readOrder) {
|
socketOptions.readOrder = readOrder;
|
return this;
|
}
|
|
/**
|
* 设置读取数据的数据结构协议
|
*
|
* @param readerProtocol
|
* @return
|
*/
|
public Builder setReaderProtocol(IMessageProtocol readerProtocol) {
|
socketOptions.messageProtocol = readerProtocol;
|
return this;
|
}
|
|
/**
|
* 设置写数据时单个数据包的最大值
|
*
|
* @param maxWriteBytes
|
* @return
|
*/
|
public Builder setMaxWriteBytes(int maxWriteBytes) {
|
socketOptions.maxWriteBytes = maxWriteBytes;
|
return this;
|
}
|
|
/**
|
* 设置读数据时单次读取的最大缓存值
|
*
|
* @param maxReadBytes
|
* @return
|
*/
|
public Builder setMaxReadBytes(int maxReadBytes) {
|
socketOptions.maxReadBytes = maxReadBytes;
|
return this;
|
}
|
|
/**
|
* 设置心跳发送频率,单位毫秒
|
*
|
* @param heartbeatFreq
|
* @return
|
*/
|
public Builder setHeartbeatFreq(long heartbeatFreq) {
|
socketOptions.heartbeatFreq = heartbeatFreq;
|
return this;
|
}
|
|
/**
|
* 设置心跳丢失的最大允许数,如果超过这个最大数就断开socket连接
|
*
|
* @param maxHeartbeatLoseTimes
|
* @return
|
*/
|
public Builder setMaxHeartbeatLoseTimes(int maxHeartbeatLoseTimes) {
|
socketOptions.maxHeartbeatLoseTimes = maxHeartbeatLoseTimes;
|
return this;
|
}
|
|
/**
|
* 设置连接超时时间
|
*
|
* @param connectTimeout
|
* @return
|
*/
|
public Builder setConnectTimeout(int connectTimeout) {
|
socketOptions.connectTimeout = connectTimeout;
|
return this;
|
}
|
|
/**
|
* 设置服务器返回数据的允许的最大值,单位兆
|
*
|
* @param maxResponseDataMb
|
* @return
|
*/
|
public Builder setMaxResponseDataMb(int maxResponseDataMb) {
|
socketOptions.maxResponseDataMb = maxResponseDataMb;
|
return this;
|
}
|
|
/**
|
* 设置重连管理器
|
*
|
* @param reconnectionManager
|
* @return
|
*/
|
public Builder setReconnectionManager(AbsReconnection reconnectionManager) {
|
socketOptions.reconnectionManager = reconnectionManager;
|
return this;
|
}
|
|
/**
|
* 安全套接字的配置
|
*
|
* @param easySSLConfig
|
* @return
|
*/
|
public Builder setEasySSLConfig(SocketSSLConfig easySSLConfig) {
|
socketOptions.easySSLConfig = easySSLConfig;
|
return this;
|
}
|
|
/**
|
* 自定义创建socket工厂
|
*
|
* @param socketFactory
|
* @return
|
*/
|
public Builder setSocketFactory(SocketFactory socketFactory) {
|
socketOptions.socketFactory = socketFactory;
|
return this;
|
}
|
|
public Builder setCharsetName(String charsetName) {
|
socketOptions.charsetName = charsetName;
|
return this;
|
}
|
|
public EasySocketOptions build() {
|
return socketOptions;
|
}
|
}
|
|
|
/**
|
* 获取默认的配置
|
*
|
* @return
|
*/
|
public static EasySocketOptions getDefaultOptions() {
|
EasySocketOptions options = new EasySocketOptions();
|
options.socketAddress = null;
|
options.backupAddress = null;
|
options.heartbeatFreq = 5 * 1000;
|
options.messageProtocol = null;
|
options.maxResponseDataMb = 5;
|
options.connectTimeout = 5 * 1000; // 连接超时默认5秒
|
options.maxWriteBytes = 100;
|
options.maxReadBytes = 50;
|
options.readOrder = ByteOrder.BIG_ENDIAN;
|
options.writeOrder = ByteOrder.BIG_ENDIAN;
|
options.maxHeartbeatLoseTimes = 5;
|
options.reconnectionManager = new DefaultReConnection();
|
options.easySSLConfig = null;
|
options.socketFactory = null;
|
options.callbackIDFactory = null;
|
options.requestTimeout = 10 * 1000; // 默认十秒
|
options.isOpenRequestTimeout = true; // 默认开启
|
options.charsetName = "UTF-8";
|
return options;
|
}
|
|
public String getCharsetName() {
|
return charsetName;
|
}
|
|
public ByteOrder getWriteOrder() {
|
return writeOrder;
|
}
|
|
public ByteOrder getReadOrder() {
|
return readOrder;
|
}
|
|
public IMessageProtocol getMessageProtocol() {
|
return messageProtocol;
|
}
|
|
public int getMaxWriteBytes() {
|
return maxWriteBytes;
|
}
|
|
public int getMaxReadBytes() {
|
return maxReadBytes;
|
}
|
|
public long getHeartbeatFreq() {
|
return heartbeatFreq;
|
}
|
|
public int getMaxHeartbeatLoseTimes() {
|
return maxHeartbeatLoseTimes;
|
}
|
|
public int getConnectTimeout() {
|
return connectTimeout;
|
}
|
|
public int getMaxResponseDataMb() {
|
return maxResponseDataMb;
|
}
|
|
public AbsReconnection getReconnectionManager() {
|
return reconnectionManager;
|
}
|
|
public SocketSSLConfig getEasySSLConfig() {
|
return easySSLConfig;
|
}
|
|
public SocketFactory getSocketFactory() {
|
return socketFactory;
|
}
|
|
public long getRequestTimeout() {
|
return requestTimeout;
|
}
|
|
public boolean isOpenRequestTimeout() {
|
return isOpenRequestTimeout;
|
}
|
|
public CallbackIDFactory getCallbackIDFactory() {
|
return callbackIDFactory;
|
}
|
|
public static void setIsDebug(boolean isDebug) {
|
EasySocketOptions.isDebug = isDebug;
|
}
|
|
public void setWriteOrder(ByteOrder writeOrder) {
|
this.writeOrder = writeOrder;
|
}
|
|
public void setReadOrder(ByteOrder readOrder) {
|
this.readOrder = readOrder;
|
}
|
|
public void setMessageProtocol(IMessageProtocol messageProtocol) {
|
this.messageProtocol = messageProtocol;
|
}
|
|
public void setMaxWriteBytes(int maxWriteBytes) {
|
this.maxWriteBytes = maxWriteBytes;
|
}
|
|
public void setMaxReadBytes(int maxReadBytes) {
|
this.maxReadBytes = maxReadBytes;
|
}
|
|
public void setHeartbeatFreq(long heartbeatFreq) {
|
this.heartbeatFreq = heartbeatFreq;
|
}
|
|
public void setMaxHeartbeatLoseTimes(int maxHeartbeatLoseTimes) {
|
this.maxHeartbeatLoseTimes = maxHeartbeatLoseTimes;
|
}
|
|
public void setConnectTimeout(int connectTimeout) {
|
this.connectTimeout = connectTimeout;
|
}
|
|
public void setMaxResponseDataMb(int maxResponseDataMb) {
|
this.maxResponseDataMb = maxResponseDataMb;
|
}
|
|
public void setReconnectionManager(AbsReconnection reconnectionManager) {
|
this.reconnectionManager = reconnectionManager;
|
}
|
|
public void setEasySSLConfig(SocketSSLConfig easySSLConfig) {
|
this.easySSLConfig = easySSLConfig;
|
}
|
|
public void setSocketFactory(SocketFactory socketFactory) {
|
this.socketFactory = socketFactory;
|
}
|
|
public void setCallbackIDFactory(CallbackIDFactory callbackIDFactory) {
|
this.callbackIDFactory = callbackIDFactory;
|
}
|
|
public void setRequestTimeout(long requestTimeout) {
|
this.requestTimeout = requestTimeout;
|
}
|
|
public void setOpenRequestTimeout(boolean openRequestTimeout) {
|
isOpenRequestTimeout = openRequestTimeout;
|
}
|
|
public SocketAddress getSocketAddress() {
|
return socketAddress;
|
}
|
|
public SocketAddress getBackupAddress() {
|
return backupAddress;
|
}
|
|
}
|