// Path: halo-turbo/src/main/java/com/ethanco/halo/turbo/bean/Config.java
// public class Config {
//     //模式
//     public Mode mode;
//     //目标IP
//     public String targetIP;
//     //目标端口
//     public int targetPort;
//     //源IP
//     //public String sourceIP;
//     //源端口
//     public int sourcePort;
//     //缓存大小
//     public int bufferSize;
//     //线程池
//     public ExecutorService threadPool;
// 
//     public List<IHandler> handlers;
// 
//     public List<IConvertor> convertors;
// 
//     public Object codec;
// 
//     public Context context;
// 
//     public KeepAlive keepAlive;
// }
// 
// Path: halo-turbo/src/main/java/com/ethanco/halo/turbo/impl/convert/ConvertManager.java
// public class ConvertManager {
//     List<IConvertor> convertChain;
// 
//     public ConvertManager(List<IConvertor> convertChain) {
//         this.convertChain = convertChain;
//     }
// 
//     public void add(IConvertor convertor) {
//         if (convertChain == null) {
//             return;
//         }
//         if (!convertChain.contains(convertor)) {
//             convertChain.add(convertor);
//         }
//     }
// 
//     public void remove(IConvertor convertor) {
//         if (convertChain == null) {
//             return;
//         }
// 
//         convertChain.remove(convertor);
//     }
// 
//     public Object convert(Object message) {
//         if (convertChain == null) {
//             return message;
//         }
// 
//         for (IConvertor convertor : convertChain) {
//             if (convertor.isSentHandler(message)) {
//                 return convertor.sentConvert(message);
//             }
//         }
// 
//         return message;
//     }
// 
//     public Object receive(Object message) {
//         if (convertChain == null) {
//             return message;
//         }
// 
//         for (IConvertor convertor : convertChain) {
//             return convertor.receiveConvert(message);
//         }
// 
//         return message;
//     }
// }


import android.os.Handler;
import android.os.Looper;
import com.ethanco.halo.turbo.bean.Config;
import com.ethanco.halo.turbo.impl.convert.ConvertManager;
import java.util.ArrayList;
import java.util.List;
package com.ethanco.halo.turbo.ads;




/**
 * Created by EthanCo on 2016/9/16.
 */
public abstract class AbstractSocket implements ISocket, ILog {
    protected Config config;
    protected ISession session = null;
    protected List<IHandler> handlers = new ArrayList<>();
    protected Handler M = new Handler(Looper.getMainLooper());
    protected ConvertManager convertManager;

// Path: halo-turbo/src/main/java/com/ethanco/halo/turbo/bean/Config.java
// public class Config {
//     //模式
//     public Mode mode;
//     //目标IP
//     public String targetIP;
//     //目标端口
//     public int targetPort;
//     //源IP
//     //public String sourceIP;
//     //源端口
//     public int sourcePort;
//     //缓存大小
//     public int bufferSize;
//     //线程池
//     public ExecutorService threadPool;
// 
//     public List<IHandler> handlers;
// 
//     public List<IConvertor> convertors;
// 
//     public Object codec;
// 
//     public Context context;
// 
//     public KeepAlive keepAlive;
// }
// 
// Path: halo-turbo/src/main/java/com/ethanco/halo/turbo/impl/convert/ConvertManager.java
// public class ConvertManager {
//     List<IConvertor> convertChain;
// 
//     public ConvertManager(List<IConvertor> convertChain) {
//         this.convertChain = convertChain;
//     }
// 
//     public void add(IConvertor convertor) {
//         if (convertChain == null) {
//             return;
//         }
//         if (!convertChain.contains(convertor)) {
//             convertChain.add(convertor);
//         }
//     }
// 
//     public void remove(IConvertor convertor) {
//         if (convertChain == null) {
//             return;
//         }
// 
//         convertChain.remove(convertor);
//     }
// 
//     public Object convert(Object message) {
//         if (convertChain == null) {
//             return message;
//         }
// 
//         for (IConvertor convertor : convertChain) {
//             if (convertor.isSentHandler(message)) {
//                 return convertor.sentConvert(message);
//             }
//         }
// 
//         return message;
//     }
// 
//     public Object receive(Object message) {
//         if (convertChain == null) {
//             return message;
//         }
// 
//         for (IConvertor convertor : convertChain) {
//             return convertor.receiveConvert(message);
//         }
// 
//         return message;
//     }
// }


// Path: halo-turbo/src/main/java/com/ethanco/halo/turbo/ads/AbstractSocket.java
import android.os.Handler;
import android.os.Looper;
import com.ethanco.halo.turbo.bean.Config;
import com.ethanco.halo.turbo.impl.convert.ConvertManager;
import java.util.ArrayList;
import java.util.List;

package com.ethanco.halo.turbo.ads;




/**
 * Created by EthanCo on 2016/9/16.
 */
public abstract class AbstractSocket implements ISocket, ILog {
    protected Config config;
    protected ISession session = null;
    protected List<IHandler> handlers = new ArrayList<>();
    protected Handler M = new Handler(Looper.getMainLooper());
    protected ConvertManager convertManager;

    public AbstractSocket(Config config) {