Browse Source

switch to apache spark

Martin Kunz 5 years ago
parent
commit
191dfcc531
2 changed files with 39 additions and 74 deletions
  1. 3 3
      pom.xml
  2. 36 71
      src/main/java/com/acdp/transceivr/WebServer.java

+ 3 - 3
pom.xml

@@ -87,9 +87,9 @@
             <version>3.14.0</version>
         </dependency>
         <dependency>
-            <groupId>io.undertow</groupId>
-            <artifactId>undertow-core</artifactId>
-            <version>${undertow.version}</version>
+            <groupId>com.sparkjava</groupId>
+            <artifactId>spark-core</artifactId>
+            <version>2.8.0</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>

+ 36 - 71
src/main/java/com/acdp/transceivr/WebServer.java

@@ -1,89 +1,54 @@
 package com.acdp.transceivr;
 
-import java.net.http.HttpClient;
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.ConcurrentHashMap;
-
-import com.eclipsesource.json.Json;
 import com.eclipsesource.json.JsonArray;
-import com.eclipsesource.json.JsonObject;
-import io.undertow.Handlers;
-import io.undertow.Undertow;
-import io.undertow.server.HttpHandler;
-import io.undertow.server.HttpServerExchange;
-import io.undertow.server.handlers.BlockingHandler;
-import io.undertow.server.handlers.form.EagerFormParsingHandler;
-import io.undertow.server.handlers.form.FormDataParser;
-import io.undertow.server.handlers.resource.ClassPathResourceManager;
-import io.undertow.server.handlers.resource.PathResourceManager;
-import io.undertow.util.Headers;
 import org.slf4j.LoggerFactory;
 
-import static io.undertow.Handlers.resource;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static spark.Spark.*;
+
 
 public class WebServer {
     private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
     private final int port;
-    private Undertow server;
-    private int nextID=1;
-    private ConcurrentHashMap<Integer, Transfer> uploads=new ConcurrentHashMap();
+    private int nextID = 1;
+    private ConcurrentHashMap<Integer, Transfer> uploads = new ConcurrentHashMap<>();
 
     public WebServer(int port, boolean debug) {
         this.port = port;
     }
 
     public void start() {
-        Undertow.Builder builder = Undertow.builder();
-        builder.addHttpListener(port, "0.0.0.0");
-        builder.setHandler(Handlers.routing()
-            .post("/xfer", new BlockingHandler(new EagerFormParsingHandler(ex -> {
-                // var qParams=ex.getQueryParameters();
-                var pParams=ex.getAttachment(FormDataParser.FORM_DATA);
-                Transfer t=new Transfer(nextID++);
-                t.from=pParams.getFirst("from").getValue();
-                t.to=pParams.getFirst("to").getValue();
-                LoadTools.startTransfer(t);
-                uploads.put(t.id, t);
-                ex.getResponseSender().send("OK: "+t.id);
-            })))
-            .get("/zero",new HttpHandler() {
-                @Override
-                public void handleRequest(HttpServerExchange ex) throws Exception {
-                    if(!dispatch(ex,this)) return;
-                    ex.startBlocking();
-                    var ba=new byte[1024];
-                    while(true)
-                        ex.getOutputStream().write(ba);
-                }
-            })
-            .post("/null",new BlockingHandler (ex -> {
-                var ba=new byte[1024];
-                while(true) {
-                    ex.getInputStream().read(ba);
-                }
-            }))
-            .get("/status", ex -> {
-                JsonArray ja=new JsonArray();
-                for(Transfer t:uploads.values())
-                    ja.add(t.toJSON());
-                ex.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
-                ex.getResponseSender().send(ja.toString());
-            })
-            .get("/*", resource(new ClassPathResourceManager(getClass().getClassLoader(),"webroot" ))
-                        .setDirectoryListingEnabled(true))
-          //  .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
-            //        .setDirectoryListingEnabled(true))
-        );
-        server = builder.build();
-        server.start();
+        port(port);
+        staticFiles.location("/webroot");
+        get("/hello", (req, res) -> "Hello World");
+        get("/zero", (req, res) -> {
+            var os = res.raw().getOutputStream();
+            var ba = new byte[1024];
+            while (true)
+                os.write(ba);
+        });
+        post("/null", (req, res) -> {
+            var is = req.raw().getInputStream();
+            var ba = new byte[1024];
+            while (true)
+                is.read(ba);
+        });
+        get("/status", (req, res) -> {
+            JsonArray ja = new JsonArray();
+            for (Transfer t : uploads.values())
+                ja.add(t.toJSON());
+            res.header("Content-Type", "application/json");
+            return ja.toString();
+        });
+        post("/xfer", (req, res) -> {
+            Transfer t = new Transfer(nextID++);
+            t.from = req.queryParams("from");
+            t.to = req.queryParams("to");
+            LoadTools.startTransfer(t);
+            uploads.put(t.id, t);
+            return "OK: " + t.id;
+        });
     }
 
-    private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
-        if (ex.isInIoThread()) {
-            ex.dispatch(handler);
-            return false;
-        }
-        ex.startBlocking();
-        return true;
-    }
 }