package org.deftserver.example.kv;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Mocked KeyValueStoreHandler server (accepts a connection and echoes back the input)
*
*/
public class KeyValueStore extends Thread {
private final static Logger logger = LoggerFactory.getLogger(KeyValueStore.class);
public static final String HOST = "127.0.0.1";
public static final int PORT = 6379;
private final static Map<String, String> dict = new HashMap<String, String>() {
{ put("deft", "kickass"); }
};
private ServerSocket serverSocket;
public KeyValueStore() {
logger.debug("Initializing KeyValueStore");
initialize();
}
public void run() {
try {
logger.debug("KeyValueStore waiting for clients...");
Socket clientSocket = serverSocket.accept();
logger.debug("KeyValueStore client connected...");
BufferedWriter os = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
BufferedReader is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
String input = is.readLine();
logger.debug("KeyValueStore received input: {}", input);
if (input.split("\\s+").length == 2) {
input = input.split("\\s+")[1]; // "GET deft" => "deft"
}
int sleep = 250;
if (input != null) {
logger.debug("KeyValueStore server sleeps " + sleep + "ms..." );
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
logger.debug("KeyValueStore woke up...");
String value = dict.get(input) + "\r\n";
os.write(value, 0, value.length());
logger.debug("KeyValueStore echoed back: " + value);
os.flush();
}
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
{ // cleanup
try {
if (is != null)
is.close();
if (os != null)
os.close();
if (clientSocket != null)
clientSocket.close();
}
catch (IOException ignore) {}
}
} catch (IOException e) { e.printStackTrace(); }
logger.debug("Closing KeyValueStore");
}
private void initialize() {
try {
serverSocket = new ServerSocket(PORT);
} catch (IOException e) { e.printStackTrace(); }
}
}