// Path: src/main/java/com/hyd/ssdb/conf/Server.java
// public class Server {
// 
//     private String host;            // 服务器地址
// 
//     private int port;               // 服务器端口
// 
//     private String pass;            // 服务器校验密码（可选）
// 
//     private boolean master = true;  // 是否是主服务器。
// 
//     private GenericObjectPoolConfig<Connection> poolConfig = createDefaultPoolConfig();     // 连接池配置参数
// 
//     private SocketConfig socketConfig = new SocketConfig();     // 网络配置参数
// 
//     public Server() {
//     }
// 
//     public Server(String host, int port) {
//         this.host = host;
//         this.port = port;
//     }
// 
//     public Server(String host, int port, boolean master) {
//         this.host = host;
//         this.port = port;
//         this.master = master;
//     }
// 
//     public Server(String host, int port, String pass) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//     }
// 
//     public Server(String host, int port, int timeoutSeconds) {
//         this.host = host;
//         this.port = port;
//         this.socketConfig.setSoTimeout(timeoutSeconds * 1000);
//     }
// 
//     public Server(String host, int port, SocketConfig socketConfig) {
//         this.host = host;
//         this.port = port;
//         this.socketConfig = socketConfig;
//     }
// 
//     public Server(String host, int port, int timeoutSeconds, int bufferSize) {
//         this.host = host;
//         this.port = port;
//         this.socketConfig.setSoTimeout(timeoutSeconds * 1000);
//         this.socketConfig.setSoBufferSize(bufferSize);
//     }
// 
//     public Server(String host, int port, String pass, boolean master) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
//     }
// 
//     public Server(String host, int port, String pass, boolean master, int timeoutSeconds, int poolMaxTotal) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
//         this.socketConfig.setSoTimeout(timeoutSeconds * 1000);
//         this.poolConfig.setMaxTotal(poolMaxTotal);
//     }
// 
//     public Server(String host, int port, String pass, boolean master, SocketConfig socketConfig) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
// 
//         if (socketConfig != null) {
//             this.socketConfig = socketConfig;
//         }
//     }
// 
//     public Server(String host, int port, String pass, boolean master,
//                   SocketConfig socketConfig, GenericObjectPoolConfig<Connection> poolConfig) {
// 
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
// 
//         if (socketConfig != null) {
//             this.socketConfig = socketConfig;
//         }
// 
//         if (poolConfig != null) {
//             this.poolConfig = poolConfig;
//         }
//     }
// 
// 
//     private GenericObjectPoolConfig<Connection> createDefaultPoolConfig() {
//         GenericObjectPoolConfig<Connection> config = new GenericObjectPoolConfig<>();
//         config.setMaxIdle(1);
//         return config;
//     }
// 
//     public GenericObjectPoolConfig<Connection> getPoolConfig() {
//         return poolConfig;
//     }
// 
//     public void setPoolConfig(GenericObjectPoolConfig<Connection> poolConfig) {
//         this.poolConfig = poolConfig;
//     }
// 
//     public SocketConfig getSocketConfig() {
//         return socketConfig;
//     }
// 
//     public void setSocketConfig(SocketConfig socketConfig) {
//         this.socketConfig = socketConfig;
//     }
// 
//     public boolean isMaster() {
//         return master;
//     }
// 
//     public void setMaster(boolean master) {
//         this.master = master;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public String getPass() {
//         return pass;
//     }
// 
//     public void setPass(String pass) {
//         this.pass = pass;
//     }
// 
//     @SuppressWarnings("SimplifiableIfStatement")
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Server)) return false;
// 
//         Server server = (Server) o;
// 
//         if (getPort() != server.getPort()) return false;
//         return getHost().equals(server.getHost());
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = getHost().hashCode();
//         result = 31 * result + getPort();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Server{" +
//                 "host='" + host + '\'' +
//                 ", port=" + port +
//                 ", master=" + master +
//                 '}';
//     }
// }


import com.hyd.ssdb.conf.Server;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
package com.hyd.ssdb.conn;


/**
 * 创建 Connection 对象并检查其状态的工厂类。
 * 一个 ConnectionFactory 对象只针对一个 SSDB 服务器
 *
 * @author Yiding
 */
public class ConnectionFactory implements PooledObjectFactory<Connection> {

    static final Logger LOG = LoggerFactory.getLogger(ConnectionFactory.class);

// Path: src/main/java/com/hyd/ssdb/conf/Server.java
// public class Server {
// 
//     private String host;            // 服务器地址
// 
//     private int port;               // 服务器端口
// 
//     private String pass;            // 服务器校验密码（可选）
// 
//     private boolean master = true;  // 是否是主服务器。
// 
//     private GenericObjectPoolConfig<Connection> poolConfig = createDefaultPoolConfig();     // 连接池配置参数
// 
//     private SocketConfig socketConfig = new SocketConfig();     // 网络配置参数
// 
//     public Server() {
//     }
// 
//     public Server(String host, int port) {
//         this.host = host;
//         this.port = port;
//     }
// 
//     public Server(String host, int port, boolean master) {
//         this.host = host;
//         this.port = port;
//         this.master = master;
//     }
// 
//     public Server(String host, int port, String pass) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//     }
// 
//     public Server(String host, int port, int timeoutSeconds) {
//         this.host = host;
//         this.port = port;
//         this.socketConfig.setSoTimeout(timeoutSeconds * 1000);
//     }
// 
//     public Server(String host, int port, SocketConfig socketConfig) {
//         this.host = host;
//         this.port = port;
//         this.socketConfig = socketConfig;
//     }
// 
//     public Server(String host, int port, int timeoutSeconds, int bufferSize) {
//         this.host = host;
//         this.port = port;
//         this.socketConfig.setSoTimeout(timeoutSeconds * 1000);
//         this.socketConfig.setSoBufferSize(bufferSize);
//     }
// 
//     public Server(String host, int port, String pass, boolean master) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
//     }
// 
//     public Server(String host, int port, String pass, boolean master, int timeoutSeconds, int poolMaxTotal) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
//         this.socketConfig.setSoTimeout(timeoutSeconds * 1000);
//         this.poolConfig.setMaxTotal(poolMaxTotal);
//     }
// 
//     public Server(String host, int port, String pass, boolean master, SocketConfig socketConfig) {
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
// 
//         if (socketConfig != null) {
//             this.socketConfig = socketConfig;
//         }
//     }
// 
//     public Server(String host, int port, String pass, boolean master,
//                   SocketConfig socketConfig, GenericObjectPoolConfig<Connection> poolConfig) {
// 
//         this.host = host;
//         this.port = port;
//         this.pass = pass;
//         this.master = master;
// 
//         if (socketConfig != null) {
//             this.socketConfig = socketConfig;
//         }
// 
//         if (poolConfig != null) {
//             this.poolConfig = poolConfig;
//         }
//     }
// 
// 
//     private GenericObjectPoolConfig<Connection> createDefaultPoolConfig() {
//         GenericObjectPoolConfig<Connection> config = new GenericObjectPoolConfig<>();
//         config.setMaxIdle(1);
//         return config;
//     }
// 
//     public GenericObjectPoolConfig<Connection> getPoolConfig() {
//         return poolConfig;
//     }
// 
//     public void setPoolConfig(GenericObjectPoolConfig<Connection> poolConfig) {
//         this.poolConfig = poolConfig;
//     }
// 
//     public SocketConfig getSocketConfig() {
//         return socketConfig;
//     }
// 
//     public void setSocketConfig(SocketConfig socketConfig) {
//         this.socketConfig = socketConfig;
//     }
// 
//     public boolean isMaster() {
//         return master;
//     }
// 
//     public void setMaster(boolean master) {
//         this.master = master;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public String getPass() {
//         return pass;
//     }
// 
//     public void setPass(String pass) {
//         this.pass = pass;
//     }
// 
//     @SuppressWarnings("SimplifiableIfStatement")
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (!(o instanceof Server)) return false;
// 
//         Server server = (Server) o;
// 
//         if (getPort() != server.getPort()) return false;
//         return getHost().equals(server.getHost());
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = getHost().hashCode();
//         result = 31 * result + getPort();
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "Server{" +
//                 "host='" + host + '\'' +
//                 ", port=" + port +
//                 ", master=" + master +
//                 '}';
//     }
// }


// Path: src/main/java/com/hyd/ssdb/conn/ConnectionFactory.java
import com.hyd.ssdb.conf.Server;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

package com.hyd.ssdb.conn;


/**
 * 创建 Connection 对象并检查其状态的工厂类。
 * 一个 ConnectionFactory 对象只针对一个 SSDB 服务器
 *
 * @author Yiding
 */
public class ConnectionFactory implements PooledObjectFactory<Connection> {

    static final Logger LOG = LoggerFactory.getLogger(ConnectionFactory.class);

    private Server server;