package org.magnum.soda.examples;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
public class HttpServer {
private static Reports manager = new Reports();
public static Queue<String> messageQueue = new LinkedList<String>();
public static void main(String[] args) throws Exception {
ContextHandler context = new ContextHandler("/get");
context.setContextPath("/");
context.setHandler(new HandlerGet());
ContextHandler contextPost = new ContextHandler("/addlistener");
contextPost.setHandler(new HandlerPost());
ContextHandler contextAdd = new ContextHandler("/addreport");
contextAdd.setHandler(new HandlerAdd());
ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[] { context, contextPost, contextAdd });
Server server = new Server(8080);
server.setHandler(contexts);
server.start();
server.join();
}
public static class HandlerGet extends AbstractHandler {
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
StringWriter writer = new StringWriter();
IOUtils.copy(request.getInputStream(), writer);
String listenerId = writer.toString();
String res = null;
for (Iterator<String> iterator = messageQueue.iterator(); iterator.hasNext(); ) {
String s = iterator.next();
String[] array = new String[2];
array = s.split(",");
System.err.println("queue:" + listenerId + " array:" + array[0] +" "+ array[1]);
if(array[0].equals(listenerId)){
res = array[1];
iterator.remove();
}
}
response.setContentType("text/plain;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println(res);
}
}
public static class HandlerPost extends AbstractHandler {
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
StringWriter writer = new StringWriter();
IOUtils.copy(request.getInputStream(), writer);
String id = writer.toString();
manager.addListener(new ReportsListener(id));
System.err.println("listener added in server: " + id);
response.setContentType("text/plain;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("listener added: " + writer.toString());
}
}
public static class HandlerAdd extends AbstractHandler {
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
StringWriter writer = new StringWriter();
IOUtils.copy(request.getInputStream(), writer);
String content = writer.toString();
manager.addReport(new Report(content));
System.err.println("report added in server: " + content + " messageQueue size:" +
messageQueue.size());
response.setContentType("text/plain;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("report added: " + content);
}
}
}
//100-4=96