// Path: src/main/java/io/stalk/common/server/map/ConsistentHash.java
// public class ConsistentHash<T> implements NodeMap<T> {
// 
//     public static final int NUMBER_OF_REPLICAS = 100;
// 
//     private final HashMap<String, Long[]> keyMap = new HashMap<String, Long[]>();
// 
//     private final HashFunction hashFunction;
//     private final int numberOfReplicas;
//     private final SortedMap<Long, T> circle = new TreeMap<Long, T>();
// 
//     public ConsistentHash() {
//         this(Hashing.md5(), NUMBER_OF_REPLICAS);
//     }
// 
//     public ConsistentHash(int numberOfReplicas) {
//         this(Hashing.md5(), numberOfReplicas);
//     }
// 
//     public ConsistentHash(HashFunction hashFunction, int numberOfReplicas) {
//         this.hashFunction = hashFunction;
//         this.numberOfReplicas = numberOfReplicas;
//     }
// 
//     public void add(String key, T node) {
//         Long keyArray[] = new Long[numberOfReplicas];
//         for (int i = 0; i < numberOfReplicas; i++) {
//             circle.put(hashFunction.hashString(key + i).asLong(),
//                     node);
//             keyArray[i] = hashFunction.hashString(key + i).asLong();
//         }
//         keyMap.put(key, keyArray);
//     }
// 
//     public void remove(String key) {
// 
//         for (int i = 0; i < numberOfReplicas; i++) {
//             circle.remove(hashFunction.hashString(key + i).asLong());
//         }
//         keyMap.remove(key);
//     }
// 
//     public boolean isExist(String key) {
//         return keyMap.containsKey(key);
//     }
// 
//     public Set<String> getKeys() {
//         return keyMap.keySet();
//     }
// 
//     public T get(String key) {
//         if (circle.isEmpty()) {
//             return null;
//         }
//         long hash = hashFunction.hashString(key).asLong();
//         if (!circle.containsKey(hash)) {
//             SortedMap<Long, T> tailMap = circle.tailMap(hash);
//             hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
//         }
//         return circle.get(hash);
//     }
// 
// 
// }
// 
// Path: src/main/java/io/stalk/common/server/map/NodeMap.java
// public interface NodeMap<T> {
// 
//     public void add(String key, T node);
// 
//     public void remove(String key);
// 
//     public T get(String key);
// 
//     public boolean isExist(String key);
// 
//     public Set<String> getKeys();
// 
// }
// 
// Path: src/main/java/io/stalk/common/server/node/ServerNode.java
// public class ServerNode extends AbstractNode {
// 
//     // @ TODO to Map!!!
//     private String channel;
// 
//     private String host;
//     private int port;
// 
//     public ServerNode(String host, int port, String channel, Logger log) {
//         super(log, "SERVER");
//         this.host = host;
//         this.port = port;
//         this.channel = channel;
//     }
// 
//     public ServerNode(JsonObject jsonObject, Logger log) {
//         super(log, "SERVER");
//         this.channel = jsonObject.getString("channel");
//         this.host = jsonObject.getString("host");
//         this.port = jsonObject.getNumber("port").intValue();
// 
//         DEBUG("created %s", jsonObject);
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public String getChannel() {
//         return channel;
//     }
// 
//     public void setChannel(String channel) {
//         this.channel = channel;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
// 
// }


import io.stalk.common.server.map.ConsistentHash;
import io.stalk.common.server.map.NodeMap;
import io.stalk.common.server.node.ServerNode;
import org.vertx.java.core.eventbus.Message;
import org.vertx.java.core.json.JsonArray;
import org.vertx.java.core.json.JsonObject;
import org.vertx.java.core.logging.Logger;
import java.util.HashMap;
package io.stalk.common.server;



public class ServerNodeManager extends AbstractNodeManager<ServerNode> {

    interface SERVER {

        String NODE = "server:node";
        String NODE_BY_CHANNEL = "server:nodeByChannel";
        String OK = "server:Ok";

    }

    private boolean isOk = false;
    private HashMap<String, ServerNode> serverList = new HashMap<String, ServerNode>();


    public ServerNodeManager() {
        super();
    }

    public ServerNodeManager(Logger logger) {
        super();
        if (logger != null) activeLogger(logger, "SERVER");
    }

    @Override
// Path: src/main/java/io/stalk/common/server/map/ConsistentHash.java
// public class ConsistentHash<T> implements NodeMap<T> {
// 
//     public static final int NUMBER_OF_REPLICAS = 100;
// 
//     private final HashMap<String, Long[]> keyMap = new HashMap<String, Long[]>();
// 
//     private final HashFunction hashFunction;
//     private final int numberOfReplicas;
//     private final SortedMap<Long, T> circle = new TreeMap<Long, T>();
// 
//     public ConsistentHash() {
//         this(Hashing.md5(), NUMBER_OF_REPLICAS);
//     }
// 
//     public ConsistentHash(int numberOfReplicas) {
//         this(Hashing.md5(), numberOfReplicas);
//     }
// 
//     public ConsistentHash(HashFunction hashFunction, int numberOfReplicas) {
//         this.hashFunction = hashFunction;
//         this.numberOfReplicas = numberOfReplicas;
//     }
// 
//     public void add(String key, T node) {
//         Long keyArray[] = new Long[numberOfReplicas];
//         for (int i = 0; i < numberOfReplicas; i++) {
//             circle.put(hashFunction.hashString(key + i).asLong(),
//                     node);
//             keyArray[i] = hashFunction.hashString(key + i).asLong();
//         }
//         keyMap.put(key, keyArray);
//     }
// 
//     public void remove(String key) {
// 
//         for (int i = 0; i < numberOfReplicas; i++) {
//             circle.remove(hashFunction.hashString(key + i).asLong());
//         }
//         keyMap.remove(key);
//     }
// 
//     public boolean isExist(String key) {
//         return keyMap.containsKey(key);
//     }
// 
//     public Set<String> getKeys() {
//         return keyMap.keySet();
//     }
// 
//     public T get(String key) {
//         if (circle.isEmpty()) {
//             return null;
//         }
//         long hash = hashFunction.hashString(key).asLong();
//         if (!circle.containsKey(hash)) {
//             SortedMap<Long, T> tailMap = circle.tailMap(hash);
//             hash = tailMap.isEmpty() ? circle.firstKey() : tailMap.firstKey();
//         }
//         return circle.get(hash);
//     }
// 
// 
// }
// 
// Path: src/main/java/io/stalk/common/server/map/NodeMap.java
// public interface NodeMap<T> {
// 
//     public void add(String key, T node);
// 
//     public void remove(String key);
// 
//     public T get(String key);
// 
//     public boolean isExist(String key);
// 
//     public Set<String> getKeys();
// 
// }
// 
// Path: src/main/java/io/stalk/common/server/node/ServerNode.java
// public class ServerNode extends AbstractNode {
// 
//     // @ TODO to Map!!!
//     private String channel;
// 
//     private String host;
//     private int port;
// 
//     public ServerNode(String host, int port, String channel, Logger log) {
//         super(log, "SERVER");
//         this.host = host;
//         this.port = port;
//         this.channel = channel;
//     }
// 
//     public ServerNode(JsonObject jsonObject, Logger log) {
//         super(log, "SERVER");
//         this.channel = jsonObject.getString("channel");
//         this.host = jsonObject.getString("host");
//         this.port = jsonObject.getNumber("port").intValue();
// 
//         DEBUG("created %s", jsonObject);
//     }
// 
//     public String getHost() {
//         return host;
//     }
// 
// 
//     public void setHost(String host) {
//         this.host = host;
//     }
// 
//     public String getChannel() {
//         return channel;
//     }
// 
//     public void setChannel(String channel) {
//         this.channel = channel;
//     }
// 
//     public int getPort() {
//         return port;
//     }
// 
//     public void setPort(int port) {
//         this.port = port;
//     }
// 
// 
// }


// Path: src/main/java/io/stalk/common/server/ServerNodeManager.java
import io.stalk.common.server.map.ConsistentHash;
import io.stalk.common.server.map.NodeMap;
import io.stalk.common.server.node.ServerNode;
import org.vertx.java.core.eventbus.Message;
import org.vertx.java.core.json.JsonArray;
import org.vertx.java.core.json.JsonObject;
import org.vertx.java.core.logging.Logger;
import java.util.HashMap;

package io.stalk.common.server;



public class ServerNodeManager extends AbstractNodeManager<ServerNode> {

    interface SERVER {

        String NODE = "server:node";
        String NODE_BY_CHANNEL = "server:nodeByChannel";
        String OK = "server:Ok";

    }

    private boolean isOk = false;
    private HashMap<String, ServerNode> serverList = new HashMap<String, ServerNode>();


    public ServerNodeManager() {
        super();
    }

    public ServerNodeManager(Logger logger) {
        super();
        if (logger != null) activeLogger(logger, "SERVER");
    }

    @Override
    protected NodeMap<ServerNode> initNodeMap() {