package org.deftserver.example.kv;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import org.deftserver.io.AsynchronousSocket;
import org.deftserver.io.IOLoop;
import org.deftserver.web.AsyncCallback;
import org.deftserver.web.AsyncResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class KeyValueStoreClient {
private final static Logger logger = LoggerFactory.getLogger(KeyValueStoreClient.class);
private AsynchronousSocket socket;
private SocketChannel channel;
private final String host;
private final int port;
public KeyValueStoreClient(String host, int port) {
this.host = host;
this.port = port;
}
public void connect() {
try {
channel = SocketChannel.open(new InetSocketAddress(host, port));
channel.configureBlocking(false);
} catch (IOException e) { e.printStackTrace(); }
socket = new AsynchronousSocket(channel);
IOLoop.INSTANCE.addHandler(channel, socket, SelectionKey.OP_READ, ByteBuffer.allocate(1024));
}
public void get(String value, AsyncResult<String> cb) {
socket.write("GET deft\r\n", new WriteCallback(cb));
}
private class WriteCallback implements AsyncCallback {
private final AsyncResult<String> cb;
public WriteCallback(AsyncResult<String> cb) {
this.cb = cb;
}
@Override
public void onCallback() {
// write is finished. read response from server
logger.debug("readUntil: \r\n");
socket.readUntil("\r\n", cb);
}
}
}