From cc2a321cfbbbb6156b119dcd9a5c46b2da1b96f0 Mon Sep 17 00:00:00 2001 From: ulrich Date: Mon, 22 Mar 2021 18:02:45 +0000 Subject: [PATCH] Code aufgeraeumt --- src/de/uhilger/avdirektor/handler/CmdHandler.java | 23 ++- /dev/null | 19 --- src/de/uhilger/avdirektor/Server.java | 7 - src/de/uhilger/avdirektor/handler/PingHandler.java | 7 - src/de/uhilger/avdirektor/handler/PlayHandler.java | 44 -------- src/de/uhilger/avdirektor/handler/OMXPlayer.java | 138 ++++++++++----------------- src/de/uhilger/avdirektor/App.java | 13 ++ 7 files changed, 85 insertions(+), 166 deletions(-) diff --git a/src/de/uhilger/avdirektor/App.java b/src/de/uhilger/avdirektor/App.java index c9552fc..9653669 100644 --- a/src/de/uhilger/avdirektor/App.java +++ b/src/de/uhilger/avdirektor/App.java @@ -6,14 +6,23 @@ import java.util.logging.Logger; /** - * + * Hauptklasse des av-director + * + * Aufruf mit + * java -jar av-director.jar port=9000 + * java -jar av-director.jar nfs-prefix="/media/mc" port=9000 + * java -Djava.util.logging.config.file=logging.properties -jar .. + * + * Der Parameter nfs-prefix bewirkt, dass beim Abspielen relative Pfade + * mit diesem Praefix verbunden werden und setzt voraus, dass auf der + * Maschine ein NFS-Mount ueber /etc/fstab eingerichtet ist. + * * @author ulrich */ public class App { private static final Logger logger = Logger.getLogger(App.class.getName()); - public static final String PI_PLAYER = "pi_player"; //public static final String FBI_PROC = "fbi_proc"; diff --git a/src/de/uhilger/avdirektor/Server.java b/src/de/uhilger/avdirektor/Server.java index 7a56d94..70f330b 100644 --- a/src/de/uhilger/avdirektor/Server.java +++ b/src/de/uhilger/avdirektor/Server.java @@ -1,9 +1,9 @@ package de.uhilger.avdirektor; import com.sun.net.httpserver.HttpServer; +import de.uhilger.avdirektor.handler.CmdHandler; import de.uhilger.avdirektor.handler.PingHandler; import de.uhilger.avdirektor.handler.PlayHandler; -import de.uhilger.avdirektor.handler.StopHandler; import de.uhilger.avdirektor.handler.StopServerHandler; import java.io.IOException; import java.util.logging.Logger; @@ -31,12 +31,9 @@ public void start() throws IOException { logger.info("Server starting on port " + port); - StopHandler sh = new StopHandler(); - sh.setCmd(App.CMD_STOP); - HttpServer server = HttpServer.create(new InetSocketAddress(port), 0); server.createContext("/avd/play", new PlayHandler()); - server.createContext("/avd/stop", sh); + server.createContext("/avd/stop", new CmdHandler(App.CMD_STOP)); server.createContext("/avd/ping", new PingHandler()); server.createContext("/avd/server/stop", new StopServerHandler()); server.setExecutor(null); // creates a default executor diff --git a/src/de/uhilger/avdirektor/handler/CmdHandler.java b/src/de/uhilger/avdirektor/handler/CmdHandler.java index 27b64d0..1ea0ec5 100644 --- a/src/de/uhilger/avdirektor/handler/CmdHandler.java +++ b/src/de/uhilger/avdirektor/handler/CmdHandler.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; @@ -17,13 +12,23 @@ * * @author ulrich */ -public abstract class CmdHandler extends OMXPlayer implements HttpHandler { +public class CmdHandler extends OMXPlayer implements HttpHandler { private static final Logger logger = Logger.getLogger(CmdHandler.class.getName()); - protected String cmd; + private String cmd; - public abstract void setCmd(String cmd); + public CmdHandler(String cmd) { + this.cmd = cmd; + } + + public void setCmd(String cmd) { + this.cmd = cmd; + } + + public String getCmd(String cmd) { + return this.cmd; + } @Override public void handle(HttpExchange t) throws IOException { @@ -33,7 +38,7 @@ String antwort = this.kommando(cmd); logger.log(Level.FINE, antwort); - String response = getResponseString(map, "cmd", antwort); + String response = getResponseString(map, cmd, antwort); t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); diff --git a/src/de/uhilger/avdirektor/handler/OMXPlayer.java b/src/de/uhilger/avdirektor/handler/OMXPlayer.java index 252c8ce..33cb7bc 100644 --- a/src/de/uhilger/avdirektor/handler/OMXPlayer.java +++ b/src/de/uhilger/avdirektor/handler/OMXPlayer.java @@ -1,8 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ package de.uhilger.avdirektor.handler; import com.sun.net.httpserver.HttpExchange; @@ -23,6 +18,12 @@ import java.util.logging.Logger; /** + * Methoden zur Ausfuehrung des Programmes omxplayer des Raspberry Pi + * sowie zum Senden von Kommandos an eine laufende Instanz des + * omxplayer. + * + * Die Klasse OMXPlayer stellt als abstrakte Basisklasse ihre Methoden + * den Handler-Klassen zur Verfuegung. * * @author ulrich */ @@ -30,85 +31,8 @@ private static final Logger logger = Logger.getLogger(OMXPlayer.class.getName()); - protected String getParam(Map map, String key) { - Object o = map.get(key); - if(o != null) { - return o.toString(); - } else { - return null; - } - } - - /* - - bei etwas wie - http://rpi4-az:9090/avd/play?t=/Filme/S/sound_city.m4v&p=--timeout=60%20--threshold=60 - - sind = nicht nur nach dem Query-Parameter sondern auch in dessen Wert - - also erstmal nach & zerlegen: - t=/Filme/S/sound_city.m4v - p=--timeout=60%20--threshold=60 - - dann die Position beim ersten = von links abschneiden - - */ - protected Map getQueryMap(HttpExchange t) { - HashMap map = new HashMap(); - String query = t.getRequestURI().getQuery(); - if(query != null && query.length() > 0) { - String qParts[] = query.split("&"); - for(String qPart : qParts) { - logger.finer("qPart: " + qPart); - String pParts[] = qPart.split("="); - map.put(pParts[0], pParts[1]); - logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]); - /* - if(qPart.contains(" ")) { - String pParts[] = qPart.split(" "); - for(String pPart : pParts) { - String ppParts[] = pPart.split("="); - map.put(ppParts[0], ppParts[1]); - logger.finer("ppParts[0]: " + ppParts[0] + ", ppParts[1]: " + ppParts[1]); - } - } else { - String pParts[] = qPart.split("="); - map.put(pParts[0], pParts[1]); - logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]); - } - */ - /* - String pParts[] = qPart.split("="); - for(String pPart : pParts) { - logger.finer("pPart: " + pPart); - } - */ - } - } - return map; - } - - protected String getResponseString(Map map, String cmd, String antwort) { - Set keys = map.keySet(); - StringBuilder buf = new StringBuilder(); - buf.append("play"); - buf.append(System.lineSeparator()); - keys.forEach((Object key) -> { - buf.append("key: "); - buf.append(key); - buf.append(System.lineSeparator()); - buf.append("value: "); - buf.append(map.get(key)); - buf.append(System.lineSeparator()); - //logger.log(Level.FINE, "key {0} value {1}", new Object[]{key, map.get(key)}); - }); - buf.append(antwort); - return buf.toString(); - } - /** * Einen Prozess zum Abspielen mit dem omxplayer starten - * @param t * @param urlStr URL der Quelle, die abgespielt werden soll * @param token * @return Antwort des Servers @@ -128,7 +52,6 @@ <a href="https://github.com/huceke/omxplayer/blob/master/README.md"target="_blank">Aufstellung der Parameter</a>.Die Zeichenkette parameter enthaelt Eintraege wie z.B. * App.OPT_LOCAL_AUDIO oder App.OPT_HDMI_AUDIO. Mehrere Parameter werden mit App.BLANK getrennt. - * @param t * @param urlStr der URL der Quelle, die abgespielt werden soll * @param parameter die Parameter, die vom omxplayer angewendet werden sollen * @param token @@ -205,7 +128,6 @@ entfernen und gibt so das Objekt wieder frei fuer die Ausfuehrung weiterer Kommandos. * - * @param t * @return die Antwort des Servers */ public String tilgen() { @@ -233,7 +155,6 @@ /** * Dem laufenden Abspielprozess ein Kommando uebermitteln - * @param t * @param k das Kommando laut * <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a> * @return die Antwort des Servers @@ -271,6 +192,53 @@ return antwort; } + /* --- --- */ + + protected String getParam(Map map, String key) { + Object o = map.get(key); + if(o != null) { + return o.toString(); + } else { + return null; + } + } + + /* + Den Query-Teil einer URL in die Parameter zerlegen + */ + protected Map getQueryMap(HttpExchange t) { + HashMap map = new HashMap(); + String query = t.getRequestURI().getQuery(); + if(query != null && query.length() > 0) { + String qParts[] = query.split("&"); + for(String qPart : qParts) { + logger.finer("qPart: " + qPart); + String pParts[] = qPart.split("="); + map.put(pParts[0], pParts[1]); + logger.finer("pParts[0]: " + pParts[0] + ", pParts[1]: " + pParts[1]); + } + } + return map; + } + + protected String getResponseString(Map map, String cmd, String antwort) { + Set keys = map.keySet(); + StringBuilder buf = new StringBuilder(); + buf.append(cmd); + buf.append(System.lineSeparator()); + keys.forEach((Object key) -> { + buf.append("key: "); + buf.append(key); + buf.append(System.lineSeparator()); + buf.append("value: "); + buf.append(map.get(key)); + buf.append(System.lineSeparator()); + //logger.log(Level.FINE, "key {0} value {1}", new Object[]{key, map.get(key)}); + }); + buf.append(antwort); + return buf.toString(); + } + /* ------ Implementierung ProzessLauscher ----------------- */ @Override diff --git a/src/de/uhilger/avdirektor/handler/PingHandler.java b/src/de/uhilger/avdirektor/handler/PingHandler.java index 1e7bde1..b94fad4 100644 --- a/src/de/uhilger/avdirektor/handler/PingHandler.java +++ b/src/de/uhilger/avdirektor/handler/PingHandler.java @@ -19,21 +19,16 @@ public class PingHandler implements HttpHandler { private static final Logger logger = Logger.getLogger(PingHandler.class.getName()); - @Override public void handle(HttpExchange t) throws IOException { logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString()); - String antwort = "ping Antwort"; - - String response = antwort; + String response = "ping"; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); - - } } diff --git a/src/de/uhilger/avdirektor/handler/PlayHandler.java b/src/de/uhilger/avdirektor/handler/PlayHandler.java index 0806ed9..7cdb127 100644 --- a/src/de/uhilger/avdirektor/handler/PlayHandler.java +++ b/src/de/uhilger/avdirektor/handler/PlayHandler.java @@ -4,48 +4,12 @@ import com.sun.net.httpserver.HttpHandler; import java.io.IOException; import java.io.OutputStream; -import java.util.HashMap; import java.util.Map; -import java.util.Set; -import java.util.function.Consumer; import java.util.logging.Level; import java.util.logging.Logger; /** - * Es koennen mehrere Varianten beim Abspielen verwendet werden. * - * Abspielen eines Titels - * abspielenMitParameternUndRueckmeldung(urlStr, null, null, 1) - * - * Abspielen eines Titels mit Rueckmeldung (z.B. fuer Playlisten) - * abspielenMitParameternUndRueckmeldung(urlStr, null, meldeUrlStr, 1) - * - * Abspielen mit Parametern - * abspielenMitParameternUndRueckmeldung(urlStr, parameter, null, 1) - * - * Abspielen mit Parametern und Rueckmeldung - * abspielenMitParameternUndRueckmeldung(urlStr, parameter, meldeUrlStr, 1) - * - * Token wird zur Zeit nicht genutzt, hier kann einfach eine beliebige - * Zahl uebergeben werden. - * - * Die drei Parameter t, p, r werden als Query im URL erwartet. Beispiele: - * t = titel - * p = parameter - * r = url fuer rueckmeldung - * - * - * /avd/play?t=/Pfad/zum/Titel.mp3 - * /avd/play?t=/Pfad/zum/Titel.mp3&p=-o=local%20-timeout=60 - * /avd/play?t=/Pfad/zum/Titel.mp3&r=http:/uhilger.de/rueckmelde/pfad - * /avd/play?t=/Pfad/zum/Titel.mp3&p=-o=local%20-timeout=60&r=http:/uhilger.de/rueckmelde/pfad - * - * String urlStr, String parameter, String meldeUrlStr, String token - * - * - * - * - * * @author ulrich */ public class PlayHandler extends OMXPlayer implements HttpHandler { @@ -53,12 +17,12 @@ private static final Logger logger = Logger.getLogger(PlayHandler.class.getName()); /* - rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&to=60&ti=60&o=local + rpi4-az:9090/avd/play?titel=/Filme/S/sound_city.m4v&th=60&ti=60&o=local OMXPlayer.abspielenMitParameternUndRueckmeldung( String urlStr, String parameter, String meldeUrlStr, String token) - Parameter des Aufrufs play als query + Parameter des Aufrufs play als query (th threshold, ti timeout) ?titel=/Filme/S/sound_city.m4v &ti=60 @@ -69,8 +33,6 @@ r muss ganz wegbleiben, wenn keine Rueckmeldung gewuescht ist */ - - @Override public void handle(HttpExchange t) throws IOException { logger.log(Level.FINE, "RequestURI: {0}", t.getRequestURI().toString()); @@ -93,4 +55,6 @@ os.write(response.getBytes()); os.close(); } + + } diff --git a/src/de/uhilger/avdirektor/handler/StopHandler.java b/src/de/uhilger/avdirektor/handler/StopHandler.java deleted file mode 100644 index 460d6dd..0000000 --- a/src/de/uhilger/avdirektor/handler/StopHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package de.uhilger.avdirektor.handler; - -/** - * - * @author ulrich - */ -public class StopHandler extends CmdHandler { - - @Override - public void setCmd(String cmd) { - this.cmd = cmd; - } - -} -- Gitblit v1.9.3