summaryrefslogtreecommitdiffstats
path: root/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableUpdaterApplication.java
diff options
context:
space:
mode:
Diffstat (limited to 'simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableUpdaterApplication.java')
-rw-r--r--simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableUpdaterApplication.java154
1 files changed, 154 insertions, 0 deletions
diff --git a/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableUpdaterApplication.java b/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableUpdaterApplication.java
new file mode 100644
index 0000000..586c82f
--- /dev/null
+++ b/simple/simple-http/src/test/java/org/simpleframework/http/socket/table/WebSocketTableUpdaterApplication.java
@@ -0,0 +1,154 @@
+package org.simpleframework.http.socket.table;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.util.Map;
+
+import org.simpleframework.common.buffer.Allocator;
+import org.simpleframework.common.buffer.ArrayAllocator;
+import org.simpleframework.http.Path;
+import org.simpleframework.http.Request;
+import org.simpleframework.http.Response;
+import org.simpleframework.http.Status;
+import org.simpleframework.http.core.Container;
+import org.simpleframework.http.core.ContainerTransportProcessor;
+import org.simpleframework.http.socket.service.Router;
+import org.simpleframework.http.socket.service.RouterContainer;
+import org.simpleframework.http.socket.service.DirectRouter;
+import org.simpleframework.transport.TransportProcessor;
+import org.simpleframework.transport.TransportSocketProcessor;
+import org.simpleframework.transport.SocketProcessor;
+import org.simpleframework.transport.Transport;
+import org.simpleframework.transport.connect.Connection;
+import org.simpleframework.transport.connect.SocketConnection;
+import org.simpleframework.transport.trace.TraceAnalyzer;
+
+public class WebSocketTableUpdaterApplication implements Container, TransportProcessor {
+
+ private final String ROOT_PATH = "C:\\Work\\development\\github\\simpleframework\\simple\\simple-http\\src\\test\\java\\org\\simpleframework\\http\\socket\\table";
+
+ private final Router negotiator;
+ private final RouterContainer container;
+ private final SocketAddress address;
+ private final Connection connection;
+ private final TransportProcessor processor;
+ private final Allocator allocator;
+ private final SocketProcessor server;
+
+ public WebSocketTableUpdaterApplication(WebSocketTableUpdater handler, TraceAnalyzer agent, int port) throws Exception {
+ this.negotiator = new DirectRouter(handler);
+ this.container = new RouterContainer(this, negotiator, 10);
+ this.allocator = new ArrayAllocator();
+ this.processor = new ContainerTransportProcessor(container, allocator, 1);
+ this.server = new TransportSocketProcessor(this);
+ this.connection = new SocketConnection(server, agent);
+ this.address = new InetSocketAddress(port);
+ }
+
+ public void connect() throws IOException {
+ connection.connect(address);
+ }
+
+ public void handle(Request req, Response resp) {
+ Path path = req.getPath();
+ String normal = path.getPath();
+
+ System.err.println(req);
+
+ if(req.getTarget().equals("/login")) {
+ String user = req.getParameter("user");
+ long time = System.currentTimeMillis();
+
+ try {
+ resp.setStatus(Status.FOUND);
+ resp.setValue("Location", "/table");
+ resp.setCookie("user", user);
+ resp.setDate("Date", time);
+ resp.setValue("Server", "WebSocketTableApplication/1.0");
+ resp.setContentType("text/html");
+ resp.close();
+ }catch(Exception e) {
+ e.printStackTrace();
+ }
+ } else if(req.getTarget().equals("/update")){
+ long time = System.currentTimeMillis();
+ try {
+ container.handle(req, resp);
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ long time = System.currentTimeMillis();
+
+ try {
+ byte[] page = loadPage(normal);
+
+ resp.setDate("Date", time);
+ resp.setValue("Server", "WebSocketTableApplication/1.0");
+
+ if(normal.endsWith(".html")) {
+ resp.setContentType("text/html");
+ } else if(normal.endsWith(".css")) {
+ resp.setContentType("text/css");
+ } else if(normal.endsWith(".js")) {
+ resp.setContentType("text/javascript");
+ } else if(normal.endsWith(".png")) {
+ resp.setContentType("image/png");
+ } else {
+ resp.setContentType("text/plain");
+ }
+ OutputStream out = resp.getOutputStream();
+ out.write(page);
+ out.close();
+ }catch(Exception e) {
+ e.printStackTrace();
+
+ try {
+ resp.setCode(404);
+ resp.setDescription("Not Found");
+ resp.setDate("Date", time);
+ resp.setValue("Server", "WebSocketTableApplication/1.0");
+ resp.setContentType("text/plain");
+
+ PrintStream out = resp.getPrintStream();
+
+ e.printStackTrace(out);
+ out.close();
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ }
+ }
+
+ public byte[] loadPage(String name) throws IOException {
+ InputStream loginPage = new FileInputStream(new File(ROOT_PATH, name));
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ byte[] chunk = new byte[1024];
+ int count = 0;
+
+ while((count = loginPage.read(chunk)) != -1) {
+ out.write(chunk, 0, count);
+ }
+ out.close();
+ return out.toByteArray();
+ }
+
+ public void process(Transport transport) throws IOException {
+ Map map = transport.getAttributes();
+ map.put(Transport.class, transport);
+ processor.process(transport);
+ }
+
+ public void stop() throws IOException {
+ processor.stop();
+ }
+}