// Path: src/main/java/org/cleverframe/fastdfs/conn/Connection.java
// public interface Connection extends Closeable {
//     /**
//      * 关闭连接
//      */
//     @Override
//     void close();
// 
//     /**
//      * 连接是否关闭
//      *
//      * @return 返回true表示连接关闭
//      */
//     boolean isClosed();
// 
//     /**
//      * 测试连接是否有效
//      *
//      * @return 返回true表示连接无效
//      */
//     boolean isValid();
// 
//     /**
//      * 获取输出流
//      *
//      * @return 输出流
//      * @throws IOException 操作异常
//      */
//     OutputStream getOutputStream() throws IOException;
// 
//     /**
//      * 获取输入流
//      *
//      * @return 输入流
//      * @throws IOException 获取输入流错误
//      */
//     InputStream getInputStream() throws IOException;
// 
//     /**
//      * 获取字符集
//      *
//      * @return 字符集
//      */
//     Charset getCharset();
// }
// 
// Path: src/main/java/org/cleverframe/fastdfs/exception/FastDfsIOException.java
// public class FastDfsIOException extends FastDfsException {
//     public FastDfsIOException(Throwable cause) {
//         super("客户端连接服务端出现了io异常", cause);
//     }
// 
//     public FastDfsIOException(String messge, Throwable cause) {
//         super("客户端连接服务端出现了io异常:" + messge, cause);
//     }
// 
//     public FastDfsIOException(String message) {
//         super(message);
//     }
// }


import org.cleverframe.fastdfs.conn.Connection;
import org.cleverframe.fastdfs.exception.FastDfsIOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
package org.cleverframe.fastdfs.protocol;



/**
 * FastDFS命令操执行抽象类
 * 作者：LiZW <br/>
 * 创建时间：2016/11/20 12:23 <br/>
 */
public abstract class AbstractCommand<T> implements BaseCommand<T> {
    /**
     * 日志
     */
    private static final Logger logger = LoggerFactory.getLogger(AbstractCommand.class);

    /**
     * 请求对象
     */
    protected BaseRequest request;

    /**
     * 响应对象
     */
    protected BaseResponse<T> response;

    /**
     * 对服务端发出请求然后接收反馈
     */
    public T execute(Connection conn) {
        // 封装socket交易 send
        try {
            send(conn.getOutputStream(), conn.getCharset());
        } catch (IOException e) {
// Path: src/main/java/org/cleverframe/fastdfs/conn/Connection.java
// public interface Connection extends Closeable {
//     /**
//      * 关闭连接
//      */
//     @Override
//     void close();
// 
//     /**
//      * 连接是否关闭
//      *
//      * @return 返回true表示连接关闭
//      */
//     boolean isClosed();
// 
//     /**
//      * 测试连接是否有效
//      *
//      * @return 返回true表示连接无效
//      */
//     boolean isValid();
// 
//     /**
//      * 获取输出流
//      *
//      * @return 输出流
//      * @throws IOException 操作异常
//      */
//     OutputStream getOutputStream() throws IOException;
// 
//     /**
//      * 获取输入流
//      *
//      * @return 输入流
//      * @throws IOException 获取输入流错误
//      */
//     InputStream getInputStream() throws IOException;
// 
//     /**
//      * 获取字符集
//      *
//      * @return 字符集
//      */
//     Charset getCharset();
// }
// 
// Path: src/main/java/org/cleverframe/fastdfs/exception/FastDfsIOException.java
// public class FastDfsIOException extends FastDfsException {
//     public FastDfsIOException(Throwable cause) {
//         super("客户端连接服务端出现了io异常", cause);
//     }
// 
//     public FastDfsIOException(String messge, Throwable cause) {
//         super("客户端连接服务端出现了io异常:" + messge, cause);
//     }
// 
//     public FastDfsIOException(String message) {
//         super(message);
//     }
// }


// Path: src/main/java/org/cleverframe/fastdfs/protocol/AbstractCommand.java
import org.cleverframe.fastdfs.conn.Connection;
import org.cleverframe.fastdfs.exception.FastDfsIOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;

package org.cleverframe.fastdfs.protocol;



/**
 * FastDFS命令操执行抽象类
 * 作者：LiZW <br/>
 * 创建时间：2016/11/20 12:23 <br/>
 */
public abstract class AbstractCommand<T> implements BaseCommand<T> {
    /**
     * 日志
     */
    private static final Logger logger = LoggerFactory.getLogger(AbstractCommand.class);

    /**
     * 请求对象
     */
    protected BaseRequest request;

    /**
     * 响应对象
     */
    protected BaseResponse<T> response;

    /**
     * 对服务端发出请求然后接收反馈
     */
    public T execute(Connection conn) {
        // 封装socket交易 send
        try {
            send(conn.getOutputStream(), conn.getCharset());
        } catch (IOException e) {
            throw new FastDfsIOException("Socket IO异常 发送消息异常", e);