package ch.usi.da.smr.transport;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class HttpTest {
public static void main(String[] args) throws IOException, ClassNotFoundException{
// server
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/state", new SendFile("/tmp/snapshot.state"));
server.createContext("/snapshot", new SendFile("/tmp/snapshot.ser"));
server.setExecutor(null); // creates a default executor
server.start();
// client
URL url = new URL("http://127.0.0.1:8080/state");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
InputStream ins = con.getInputStream();
InputStreamReader isr = new InputStreamReader(ins);
BufferedReader in = new BufferedReader(isr);
String line;
Map<Integer, Integer> state = new HashMap<Integer, Integer>();
while ((line = in.readLine()) != null){
String[] s = line.split("=");
state.put(Integer.parseInt(s[0]),Integer.parseInt(s[1]));
}
System.err.println(state);
in.close();
url = new URL("http://127.0.0.1:8080/snapshot");
con = (HttpURLConnection)url.openConnection();
ins = con.getInputStream();
ObjectInputStream ois = new ObjectInputStream(ins);
@SuppressWarnings("unchecked")
Map<String,byte[]> snapshot = (Map<String,byte[]>) ois.readObject();
for(Entry<String,byte[]> e : snapshot.entrySet()){
System.out.println(e.getKey() + "->" + new String(e.getValue()));
}
ois.close();
}
static class SendFile implements HttpHandler {
private final File file;
public SendFile(String file){
this.file = new File(file);
}
public void handle(HttpExchange t) throws IOException {
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[(int)file.length()];
bis.read(b, 0, b.length); //FIXME: keeps file in mem!
bis.close();
fis.close();
t.sendResponseHeaders(200, b.length);
OutputStream os = t.getResponseBody();
os.write(b);
os.close();
}
}
}