From ac11942f36b8c38244930260a0ead02c9325a75e Mon Sep 17 00:00:00 2001
From: ulrich
Date: Wed, 24 Mar 2021 23:17:40 +0000
Subject: [PATCH] FileHandler hinzugefuegt
---
src/de/uhilger/avdirektor/handler/FileHandler.java | 57 ++++++++++++++++++++++++++++
src/logging.properties | 4 +-
src/de/uhilger/avdirektor/Server.java | 2 +
src/de/uhilger/avdirektor/handler/StopServerHandler.java | 1
src/de/uhilger/avdirektor/App.java | 10 +++-
5 files changed, 69 insertions(+), 5 deletions(-)
diff --git a/src/de/uhilger/avdirektor/App.java b/src/de/uhilger/avdirektor/App.java
index d4b7035..c9e1747 100644
--- a/src/de/uhilger/avdirektor/App.java
+++ b/src/de/uhilger/avdirektor/App.java
@@ -1,5 +1,6 @@
package de.uhilger.avdirektor;
+import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.Level;
@@ -23,6 +24,10 @@
private static final Logger logger = Logger.getLogger(App.class.getName());
+ public static final String IP_PORT = "port";
+ public static final String IP_WWW_DATA = "www-data";
+ public static final String IP_NFS_PREFIX = "nfs-prefix";
+
private static HashMap initParams;
private static Process playerproc;
@@ -35,9 +40,8 @@
String[] argParts = arg.split("=");
initParams.put(argParts[0], argParts[1]);
}
-
-
- Server server = new Server(Integer.parseInt(getInitParameter("port")));
+
+ Server server = new Server(Integer.parseInt(getInitParameter(IP_PORT)));
try {
server.start();
} catch (IOException ex) {
diff --git a/src/de/uhilger/avdirektor/Server.java b/src/de/uhilger/avdirektor/Server.java
index a5916d6..468e47f 100644
--- a/src/de/uhilger/avdirektor/Server.java
+++ b/src/de/uhilger/avdirektor/Server.java
@@ -2,6 +2,7 @@
import com.sun.net.httpserver.HttpServer;
import de.uhilger.avdirektor.handler.CmdHandler;
+import de.uhilger.avdirektor.handler.FileHandler;
import de.uhilger.avdirektor.handler.OMXPlayer;
import de.uhilger.avdirektor.handler.PingHandler;
import de.uhilger.avdirektor.handler.PlayHandler;
@@ -41,6 +42,7 @@
server.createContext("/avd/pause", new CmdHandler(OMXPlayer.CMD_PAUSE_RESUME));
server.createContext("/avd/ping", new PingHandler(OMXPlayer.F_PING));
server.createContext("/avd/server/stop", new StopServerHandler());
+ server.createContext("/avd/ui", new FileHandler(App.getInitParameter(App.IP_WWW_DATA)));
//server.setExecutor(null); // creates a default executor
server.setExecutor(Executors.newFixedThreadPool(20));
server.start();
diff --git a/src/de/uhilger/avdirektor/handler/FileHandler.java b/src/de/uhilger/avdirektor/handler/FileHandler.java
new file mode 100644
index 0000000..1583694
--- /dev/null
+++ b/src/de/uhilger/avdirektor/handler/FileHandler.java
@@ -0,0 +1,57 @@
+package de.uhilger.avdirektor.handler;
+
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import de.uhilger.avdirektor.App;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.logging.Logger;
+
+/**
+ *
+ * @author ulrich
+ */
+public class FileHandler implements HttpHandler {
+
+ private static final Logger logger = Logger.getLogger(FileHandler.class.getName());
+
+ private String basePath;
+
+ public FileHandler(String basePath) {
+ this.basePath = basePath;
+ }
+
+ @Override
+ public void handle(HttpExchange t) throws IOException {
+ String ctxPath = t.getHttpContext().getPath();
+ String uriPath = t.getRequestURI().getPath();
+ String fName = uriPath.substring(ctxPath.length());
+ if(fName.endsWith("/")) {
+ fName += "index.html";
+ }
+ OutputStream os = t.getResponseBody();
+ File outFile = new File(basePath, fName);
+ if(outFile.exists()) {
+ t.sendResponseHeaders(200, outFile.length());
+ InputStream in = new FileInputStream(outFile);
+ int b = in.read();
+ while(b > -1) {
+ os.write(b);
+ b = in.read();
+ }
+ in.close();
+ } else {
+ String response = fName + " not found.";
+ byte[] bytes = response.getBytes(StandardCharsets.UTF_8);
+ t.sendResponseHeaders(404, bytes.length);
+ os.write(bytes);
+ }
+ os.flush();
+ os.close();
+ }
+
+}
diff --git a/src/de/uhilger/avdirektor/handler/StopServerHandler.java b/src/de/uhilger/avdirektor/handler/StopServerHandler.java
index b28a8bf..8812fe8 100644
--- a/src/de/uhilger/avdirektor/handler/StopServerHandler.java
+++ b/src/de/uhilger/avdirektor/handler/StopServerHandler.java
@@ -21,6 +21,7 @@
exchange.sendResponseHeaders(200, response.length());
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
+ os.flush();
os.close();
Logger.getLogger(StopServerHandler.class.getName()).info("stopping app.");
App.stop();
diff --git a/src/logging.properties b/src/logging.properties
index 6b0ab55..aa7cc61 100644
--- a/src/logging.properties
+++ b/src/logging.properties
@@ -27,7 +27,7 @@
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
# .level= FINE
-.level = NONE
+.level = OFF
############################################################
# Handler specific properties.
@@ -69,4 +69,4 @@
# de.uhilger.wbx.handlers = java.util.logging.ConsoleHandler
# de.uhilger.wbx.level = FINEST
de.uhilger.avdirektor.handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
-de.uhilger.avdirektor.level = INFO
\ No newline at end of file
+de.uhilger.avdirektor.level = FINEST
\ No newline at end of file
--
Gitblit v1.9.3