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