// Path: src/main/java/io/stalk/common/server/ServerNodeManager.java
// interface SERVER {
// 
//     String NODE = "server:node";
//     String NODE_BY_CHANNEL = "server:nodeByChannel";
//     String OK = "server:Ok";
// 
// }
// 
// 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/map/NodeRegistry.java
// public class NodeRegistry<T> implements NodeMap<T> {
// 
//     private final HashMap<String, T> keyMap = new HashMap<String, T>();
// 
//     public NodeRegistry() {
//     }
// 
//     @Override
//     public void add(String key, T node) {
//         keyMap.put(key, node);
// 
//     }
// 
//     @Override
//     public void remove(String key) {
//         keyMap.remove(key);
//     }
// 
//     @Override
//     public T get(String key) {
//         return keyMap.get(key);
//     }
// 
//     @Override
//     public boolean isExist(String key) {
//         return keyMap.containsKey(key);
//     }
// 
//     @Override
//     public Set<String> getKeys() {
//         return keyMap.keySet();
//     }
// 
// }
// 
// Path: src/main/java/io/stalk/common/server/node/RedisPoolNode.java
// public class RedisPoolNode extends AbstractNode {
// 
//     private String channel;
//     private JedisPool jedisPool;
// 
//     public RedisPoolNode(JsonObject jsonObject, Logger log, String prefix) {
// 
//         super(log, prefix);
// 
//         this.channel = jsonObject.getString("channel");
// 
//         JedisPoolConfig config = new JedisPoolConfig();
//         config.testOnBorrow = true;
// 
//         JedisPool jedisPool;
// 
//         if (StringUtils.isEmpty(jsonObject.getString("host"))) {
//             jedisPool = new JedisPool(config, "localhost");
//         } else {
//             jedisPool = new JedisPool(config,
//                     jsonObject.getString("host"),
//                     jsonObject.getInteger("port").intValue());
//         }
// 
//         this.jedisPool = jedisPool;
// 
// 
//         Jedis jedis = this.jedisPool.getResource();
//         DEBUG("connected <%s!!> %s", jedis.ping(), jsonObject);
//         this.jedisPool.returnResource(jedis);
//     }
// 
//     public String getChannel() {
//         return channel;
//     }
// 
//     public void setChannel(String channel) {
//         this.channel = channel;
//     }
// 
//     public JedisPool getJedisPool() {
//         return jedisPool;
//     }
// 
//     public void setJedisPool(JedisPool jedisPool) {
//         this.jedisPool = jedisPool;
//     }
// 
//     public Long hset(String key, String field, String value) {
//         Jedis jedis = jedisPool.getResource();
//         Long status = jedis.hset(key, field, value);
//         jedisPool.returnResource(jedis);
// 
//         return status;
//     }
// 
//     public String hget(String key, String field) {
//         Jedis jedis = jedisPool.getResource();
//         String value = jedis.hget(key, field);
//         jedisPool.returnResource(jedis);
// 
//         return value;
//     }
// 
//     public Set<String> hkeys(String key) {
//         Jedis jedis = jedisPool.getResource();
//         Set<String> keys = jedis.hkeys(key);
//         jedisPool.returnResource(jedis);
// 
//         return keys;
//     }
// 
//     public Long hdel(String key, String... field) {
//         Jedis jedis = jedisPool.getResource();
//         Long status = jedis.hdel(key, field);
//         jedisPool.returnResource(jedis);
// 
//         return status;
//     }
// 
//     public String set(String key, String value) {
//         Jedis jedis = jedisPool.getResource();
//         String returnVal = jedis.set(key, value);
//         jedisPool.returnResource(jedis);
// 
//         return returnVal;
//     }
// 
//     public String get(String key) {
//         Jedis jedis = jedisPool.getResource();
//         String value = jedis.get(key);
//         jedisPool.returnResource(jedis);
// 
//         return value;
//     }
// 
//     public Long publish(String channel, String message) {
//         Jedis jedis = jedisPool.getResource();
//         Long status = jedis.publish(channel, message);
//         jedisPool.returnResource(jedis);
// 
//         return status;
//     }
// 
// }


import io.stalk.common.server.ServerNodeManager.SERVER;
import io.stalk.common.server.map.NodeMap;
import io.stalk.common.server.map.NodeRegistry;
import io.stalk.common.server.node.RedisPoolNode;
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;
            }

        }

        DEBUG("refreshNode - size : %d ", nodes.getKeys().size());

        if (nodes.getKeys().size() > 0) {
            isOk = true;
        } else {
            isOk = false;
        }
    }

    @Override
    public void messageHandle(Message<JsonObject> message) {

        String action = message.body().getString("action");
        DEBUG("messageHandle : %s ", message.body());

        // to be deleted!!!
        switch (action) {
            case "message:publish":

                sendOK(message, publish(
                        message.body().getString("channel"),
                        message.body()
                ));

                break;

// Path: src/main/java/io/stalk/common/server/ServerNodeManager.java
// interface SERVER {
// 
//     String NODE = "server:node";
//     String NODE_BY_CHANNEL = "server:nodeByChannel";
//     String OK = "server:Ok";
// 
// }
// 
// 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/map/NodeRegistry.java
// public class NodeRegistry<T> implements NodeMap<T> {
// 
//     private final HashMap<String, T> keyMap = new HashMap<String, T>();
// 
//     public NodeRegistry() {
//     }
// 
//     @Override
//     public void add(String key, T node) {
//         keyMap.put(key, node);
// 
//     }
// 
//     @Override
//     public void remove(String key) {
//         keyMap.remove(key);
//     }
// 
//     @Override
//     public T get(String key) {
//         return keyMap.get(key);
//     }
// 
//     @Override
//     public boolean isExist(String key) {
//         return keyMap.containsKey(key);
//     }
// 
//     @Override
//     public Set<String> getKeys() {
//         return keyMap.keySet();
//     }
// 
// }
// 
// Path: src/main/java/io/stalk/common/server/node/RedisPoolNode.java
// public class RedisPoolNode extends AbstractNode {
// 
//     private String channel;
//     private JedisPool jedisPool;
// 
//     public RedisPoolNode(JsonObject jsonObject, Logger log, String prefix) {
// 
//         super(log, prefix);
// 
//         this.channel = jsonObject.getString("channel");
// 
//         JedisPoolConfig config = new JedisPoolConfig();
//         config.testOnBorrow = true;
// 
//         JedisPool jedisPool;
// 
//         if (StringUtils.isEmpty(jsonObject.getString("host"))) {
//             jedisPool = new JedisPool(config, "localhost");
//         } else {
//             jedisPool = new JedisPool(config,
//                     jsonObject.getString("host"),
//                     jsonObject.getInteger("port").intValue());
//         }
// 
//         this.jedisPool = jedisPool;
// 
// 
//         Jedis jedis = this.jedisPool.getResource();
//         DEBUG("connected <%s!!> %s", jedis.ping(), jsonObject);
//         this.jedisPool.returnResource(jedis);
//     }
// 
//     public String getChannel() {
//         return channel;
//     }
// 
//     public void setChannel(String channel) {
//         this.channel = channel;
//     }
// 
//     public JedisPool getJedisPool() {
//         return jedisPool;
//     }
// 
//     public void setJedisPool(JedisPool jedisPool) {
//         this.jedisPool = jedisPool;
//     }
// 
//     public Long hset(String key, String field, String value) {
//         Jedis jedis = jedisPool.getResource();
//         Long status = jedis.hset(key, field, value);
//         jedisPool.returnResource(jedis);
// 
//         return status;
//     }
// 
//     public String hget(String key, String field) {
//         Jedis jedis = jedisPool.getResource();
//         String value = jedis.hget(key, field);
//         jedisPool.returnResource(jedis);
// 
//         return value;
//     }
// 
//     public Set<String> hkeys(String key) {
//         Jedis jedis = jedisPool.getResource();
//         Set<String> keys = jedis.hkeys(key);
//         jedisPool.returnResource(jedis);
// 
//         return keys;
//     }
// 
//     public Long hdel(String key, String... field) {
//         Jedis jedis = jedisPool.getResource();
//         Long status = jedis.hdel(key, field);
//         jedisPool.returnResource(jedis);
// 
//         return status;
//     }
// 
//     public String set(String key, String value) {
//         Jedis jedis = jedisPool.getResource();
//         String returnVal = jedis.set(key, value);
//         jedisPool.returnResource(jedis);
// 
//         return returnVal;
//     }
// 
//     public String get(String key) {
//         Jedis jedis = jedisPool.getResource();
//         String value = jedis.get(key);
//         jedisPool.returnResource(jedis);
// 
//         return value;
//     }
// 
//     public Long publish(String channel, String message) {
//         Jedis jedis = jedisPool.getResource();
//         Long status = jedis.publish(channel, message);
//         jedisPool.returnResource(jedis);
// 
//         return status;
//     }
// 
// }


// Path: src/main/java/io/stalk/common/server/RedisNodeManager.java
import io.stalk.common.server.ServerNodeManager.SERVER;
import io.stalk.common.server.map.NodeMap;
import io.stalk.common.server.map.NodeRegistry;
import io.stalk.common.server.node.RedisPoolNode;
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;

            }

        }

        DEBUG("refreshNode - size : %d ", nodes.getKeys().size());

        if (nodes.getKeys().size() > 0) {
            isOk = true;
        } else {
            isOk = false;
        }
    }

    @Override
    public void messageHandle(Message<JsonObject> message) {

        String action = message.body().getString("action");
        DEBUG("messageHandle : %s ", message.body());

        // to be deleted!!!
        switch (action) {
            case "message:publish":

                sendOK(message, publish(
                        message.body().getString("channel"),
                        message.body()
                ));

                break;

            case SERVER.OK: