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
|
* <a href="https://github.com/huceke/omxplayer/blob/master/README.md" target="_blank">Liste der Kommandos</a>
|
* @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;
|
}
|
|
}
|