package com.dounine.corgi.register.api;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.exception.ZkNoNodeException;
import org.I0Itec.zkclient.exception.ZkNodeExistsException;
import org.apache.zookeeper.Watcher;
import java.util.List;
/**
* Created by huanghuanlai on 16/7/28.
*/
public class ZkClient {
private org.I0Itec.zkclient.ZkClient zkClient;
private volatile Watcher.Event.KeeperState state = Watcher.Event.KeeperState.SyncConnected;
public ZkClient(String url, int connectTimeout) {
zkClient = new org.I0Itec.zkclient.ZkClient(url,connectTimeout);
}
public void createPersistent(String path) {
zkClient.createPersistent(path, true);
}
public void createEpseq(String path, Object data) {
zkClient.createEphemeralSequential(path, data);
}
public List<String> getChildren(String path) {
try {
List<String> pathList = zkClient.getChildren(path);
if (pathList != null && pathList.size() > 0) {
return pathList;
}
} catch (ZkNoNodeException e) {
e.printStackTrace();
}
return null;
}
public <T> T getData(String path) {
try {
return zkClient.readData(path, true);
} catch (ZkNoNodeException e) {
return null;
}
}
public void delete(String path) {
try {
zkClient.delete(path);
} catch (ZkNodeExistsException e) {
}
}
public void setWatcher(String path, IZkDataListener watcher){
zkClient.subscribeDataChanges(path,watcher);
}
public boolean isConnected(){
return state== Watcher.Event.KeeperState.SyncConnected;
}
public void close(){
zkClient.close();
}
}