package de.uhilger.calypso.handler; import de.uhilger.calypso.App; import static de.uhilger.calypso.handler.OMXPlayer.CMD_STOP; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author ulli */ public abstract class BasePlayer implements Player { private static final Logger logger = Logger.getLogger(BasePlayer.class.getName()); public static final String F_PLAY = "play"; public static final String F_PING = "ping"; @Override public void prozessBeendet(String meldeUrlStr) { logger.log(Level.INFO, "Abspielen beendet, sende Meldung an {0}.", new Object[]{meldeUrlStr}); try { HttpURLConnection conn = (HttpURLConnection) new URL(meldeUrlStr).openConnection(); conn.setRequestMethod("GET"); conn.connect(); int status = conn.getResponseCode(); logger.log(Level.INFO, "Abspielen beendet, Meldung an {0} mit Statuscode {1} gesendet.", new Object[]{meldeUrlStr, status}); /* fuer den Fall, dass ein Stopp-Signal den Player nicht erreicht oder dort nicht funktioniert, gibt es keine Moeglichkeit festzustellen, dass der Player noch spielt. Damit in einem solchen Fall der Zeiger auf den Abspielprozess nicht verloren geht, wird der Zeiger nicht auf null gesetzt. */ //App.setPlayerProcess(null); } catch(IOException ex) { logger.log(Level.INFO, ex.getMessage(), ex); } } @Override public String tilgen() { logger.log(Level.INFO,"Player tilgen."); String antwort; // = null; try { Process o = App.getPlayerProcess(); if(o == null) { antwort = "Es ist kein Player zum Beenden vorhanden."; //App.setPlayerProcess(null); } else { kommando(CMD_STOP); // setzt den Prozess der App auf null antwort = "Player gestoppt."; } } catch(Exception ex) { antwort = "Fehler: " + ex.getMessage(); } return antwort; } public String getParam(Map map, String key) { Object o = map.get(key); if(o != null) { return o.toString(); } else { return null; } } /** * Dem laufenden Abspielprozess ein Kommando uebermitteln * @param k das Kommando laut * Liste der Kommandos * @return die Antwort des Servers */ @Override public String kommando(String k) { String antwort; // = null; try { //Object o = t.getAttribute(App.PI_PLAYER); Process o = App.getPlayerProcess(); if(o == null) { //App.setPlayerProcess(null); //servletContext.removeAttribute(PI_PLAYER); //t.setAttribute(App.PI_PLAYER, null); antwort = "Es wird nichts abgespielt dem ein Kommando gesendet werden kann."; } else { Process player_process = o; OutputStream os = player_process.getOutputStream(); Writer out = new BufferedWriter(new OutputStreamWriter(os)); out.write(k); out.flush(); antwort = "Kommando '" + k + "' ausgefuehrt."; } } catch(IOException ex) { antwort = "Fehler: " + ex.getMessage(); } return antwort; } }