// Path: src/main/java/com/baidu/unbiz/multiengine/endpoint/HostConf.java
// public class HostConf {
// 
//     private String host = System.getProperty("host", "127.0.0.1");
//     private int port = Integer.parseInt(System.getProperty("port", "8007"));
//     private boolean ssl = System.getProperty("ssl") != null;
// 
//     public HostConf() {
//         try {
//             InetAddress addr = InetAddress.getLocalHost();
//             host = addr.getHostAddress();
//         } catch (UnknownHostException e) {
//             // do nothing
//         }
//     }
// 
//     public HostConf(String host, int port) {
//         this();
//         this.host = host;
//         this.port = port;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (!(obj instanceof HostConf)) {
//             return false;
//         }
//         HostConf other = (HostConf) obj;
//         return this.host.equals(other.getHost()) && this.port == other.getPort() && this.ssl == other.isSsl();
//     }
// 
//     @Override
//     public int hashCode() {
//         return this.host.hashCode() + this.host.hashCode();
//     }
// 
//     public static List<HostConf> resolveHost(String hosts) {
//         List<HostConf> hostConfs = new ArrayList<HostConf>();
//         if (StringUtils.isEmpty(hosts)) {
//             return hostConfs;
//         }
//         String[] hostStrs = hosts.split(";");
//         for (String host : hostStrs) {
//             String ip = host.replaceAll(":.*", "");
//             String port = host.replaceAll(".*:", "");
//             hostConfs.add(new HostConf(ip, Integer.parseInt(port)));
//         }
//         return hostConfs;
//     }
// 
//     public static List<HostConf> resolvePort(String ports) {
// 
//         List<HostConf> hostConfs = new ArrayList<HostConf>();
//         if (StringUtils.isEmpty(ports)) {
//             return hostConfs;
//         }
//         String[] ps = ports.split(";");
//         for (String port : ps) {
//             HostConf hostConf = new HostConf();
//             hostConf.setPort(Integer.parseInt(port));
//             hostConfs.add(hostConf);
//         }
//         return hostConfs;
//     }
// 
//     public String info() {
//         StringBuilder sb = new StringBuilder();
//         sb.append(this.getHost()).append(":").append(this.getPort());
//         return sb.toString();
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public boolean isSsl() {
//         return ssl;
//     }
// 
//     public void setSsl(boolean ssl) {
//         this.ssl = ssl;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/DefaultSessionIdProvider.java
// public class DefaultSessionIdProvider implements SessionIdProvider, Cloneable {
//     private String prefix;
//     private volatile String currentSessionId;
// 
//     /**
//      * 无参数构造方法
//      */
//     public DefaultSessionIdProvider() {
//     }
// 
//     /**
//      * 构造方法
//      *
//      * @param prefix sessionid前缀
//      */
//     public DefaultSessionIdProvider(String prefix) {
//         this.prefix = prefix;
//     }
// 
//     public String getPrefix() {
//         return prefix;
//     }
// 
//     public void setPrefix(String prefix) {
//         this.prefix = prefix;
//     }
// 
// 
//     @Override
//     public String getSessionId(boolean refresh) {
//         if (refresh) {
//             currentSessionId = genSessionId();
//         }
//         return currentSessionId;
//     }
// 
//     /**
//      * 生成uuid session
//      * 
//      * @return session
//      */
//     private String genSessionId() {
//         if (prefix == null) {
//             return UUID.randomUUID().toString();
//         } else {
//             return prefix + "_" + UUID.randomUUID().toString();
//         }
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/SequenceIdGen.java
// public class SequenceIdGen {
//     private AtomicLong counter = new AtomicLong(0);
// 
//     public long genId() {
//         long v = counter.incrementAndGet();
//         if (v < 0) {
//             v &= Long.MAX_VALUE;
//         }
//         if (v == 0) {
//             return genId();
//         }
//         return v;
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/SessionIdProvider.java
// public interface SessionIdProvider {
//     /**
//      * 获取sessionid
//      *
//      * @param refresh 是否刷新新session id
//      * @return session id
//      */
//     String getSessionId(boolean refresh);
// 
// }


import com.baidu.unbiz.multiengine.endpoint.HostConf;
import com.baidu.unbiz.multiengine.transport.DefaultSessionIdProvider;
import com.baidu.unbiz.multiengine.transport.SequenceIdGen;
import com.baidu.unbiz.multiengine.transport.SessionIdProvider;
package com.baidu.unbiz.multiengine.transport.client;


/**
 * Created by wangchongjie on 16/4/11.
 */
public class TaskClientFactory {

    private static SessionIdProvider idProvider = new DefaultSessionIdProvider("TaskClient");

// Path: src/main/java/com/baidu/unbiz/multiengine/endpoint/HostConf.java
// public class HostConf {
// 
//     private String host = System.getProperty("host", "127.0.0.1");
//     private int port = Integer.parseInt(System.getProperty("port", "8007"));
//     private boolean ssl = System.getProperty("ssl") != null;
// 
//     public HostConf() {
//         try {
//             InetAddress addr = InetAddress.getLocalHost();
//             host = addr.getHostAddress();
//         } catch (UnknownHostException e) {
//             // do nothing
//         }
//     }
// 
//     public HostConf(String host, int port) {
//         this();
//         this.host = host;
//         this.port = port;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (!(obj instanceof HostConf)) {
//             return false;
//         }
//         HostConf other = (HostConf) obj;
//         return this.host.equals(other.getHost()) && this.port == other.getPort() && this.ssl == other.isSsl();
//     }
// 
//     @Override
//     public int hashCode() {
//         return this.host.hashCode() + this.host.hashCode();
//     }
// 
//     public static List<HostConf> resolveHost(String hosts) {
//         List<HostConf> hostConfs = new ArrayList<HostConf>();
//         if (StringUtils.isEmpty(hosts)) {
//             return hostConfs;
//         }
//         String[] hostStrs = hosts.split(";");
//         for (String host : hostStrs) {
//             String ip = host.replaceAll(":.*", "");
//             String port = host.replaceAll(".*:", "");
//             hostConfs.add(new HostConf(ip, Integer.parseInt(port)));
//         }
//         return hostConfs;
//     }
// 
//     public static List<HostConf> resolvePort(String ports) {
// 
//         List<HostConf> hostConfs = new ArrayList<HostConf>();
//         if (StringUtils.isEmpty(ports)) {
//             return hostConfs;
//         }
//         String[] ps = ports.split(";");
//         for (String port : ps) {
//             HostConf hostConf = new HostConf();
//             hostConf.setPort(Integer.parseInt(port));
//             hostConfs.add(hostConf);
//         }
//         return hostConfs;
//     }
// 
//     public String info() {
//         StringBuilder sb = new StringBuilder();
//         sb.append(this.getHost()).append(":").append(this.getPort());
//         return sb.toString();
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public boolean isSsl() {
//         return ssl;
//     }
// 
//     public void setSsl(boolean ssl) {
//         this.ssl = ssl;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/DefaultSessionIdProvider.java
// public class DefaultSessionIdProvider implements SessionIdProvider, Cloneable {
//     private String prefix;
//     private volatile String currentSessionId;
// 
//     /**
//      * 无参数构造方法
//      */
//     public DefaultSessionIdProvider() {
//     }
// 
//     /**
//      * 构造方法
//      *
//      * @param prefix sessionid前缀
//      */
//     public DefaultSessionIdProvider(String prefix) {
//         this.prefix = prefix;
//     }
// 
//     public String getPrefix() {
//         return prefix;
//     }
// 
//     public void setPrefix(String prefix) {
//         this.prefix = prefix;
//     }
// 
// 
//     @Override
//     public String getSessionId(boolean refresh) {
//         if (refresh) {
//             currentSessionId = genSessionId();
//         }
//         return currentSessionId;
//     }
// 
//     /**
//      * 生成uuid session
//      * 
//      * @return session
//      */
//     private String genSessionId() {
//         if (prefix == null) {
//             return UUID.randomUUID().toString();
//         } else {
//             return prefix + "_" + UUID.randomUUID().toString();
//         }
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/SequenceIdGen.java
// public class SequenceIdGen {
//     private AtomicLong counter = new AtomicLong(0);
// 
//     public long genId() {
//         long v = counter.incrementAndGet();
//         if (v < 0) {
//             v &= Long.MAX_VALUE;
//         }
//         if (v == 0) {
//             return genId();
//         }
//         return v;
//     }
// 
// }
// 
// Path: src/main/java/com/baidu/unbiz/multiengine/transport/SessionIdProvider.java
// public interface SessionIdProvider {
//     /**
//      * 获取sessionid
//      *
//      * @param refresh 是否刷新新session id
//      * @return session id
//      */
//     String getSessionId(boolean refresh);
// 
// }


// Path: src/main/java/com/baidu/unbiz/multiengine/transport/client/TaskClientFactory.java
import com.baidu.unbiz.multiengine.endpoint.HostConf;
import com.baidu.unbiz.multiengine.transport.DefaultSessionIdProvider;
import com.baidu.unbiz.multiengine.transport.SequenceIdGen;
import com.baidu.unbiz.multiengine.transport.SessionIdProvider;

package com.baidu.unbiz.multiengine.transport.client;


/**
 * Created by wangchongjie on 16/4/11.
 */
public class TaskClientFactory {

    private static SessionIdProvider idProvider = new DefaultSessionIdProvider("TaskClient");

    public static TaskClient createTaskClient(HostConf hostConf) {