1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
public class ServerManager{
private String openTTDFolder;
private ServerProcess serveurProcess;
private InterfaceControleur controleur;
/*
* Lance l'exécutable d'openTTD
*/
public void startServer(String commande) throws IOException{
// Lance le processus
serveurProcess = new ServerProcess(controleur);
serveurProcess.startProcess(commande);
}
/*
* Envoie une commande vers le serveur.
*/
public void sendCmd(String cmd) throws IOException{
serveurProcess.sendCmd(cmd);
}
... ... ... ...
}
public class ServerProcess implements Runnable{
private InterfaceControleur controleur;
private Process serveurProcess;
private ServerCmdInterpreter cmdInterpreter;
public ServerProcess(InterfaceControleur controleur){
this.controleur = controleur;
}
/*
* Démarre le processus du serveur
*/
public void startProcess(String commande) throws IOException{
serveurProcess = Runtime.getRuntime().exec(commande + " -D");
// Lance le thread d'écoute
Thread th = new Thread(this);
th.start();
// Lance l'interpreteur de commandes
cmdInterpreter = new ServerCmdInterpreter(controleur,
serveurProcess);
cmdInterpreter.listen();
}
/*
* Ecoute les messages du serveur
*/
public void run(){
try{
BufferedReader reader = new BufferedReader(
new InputStreamReader(
serveurProcess.getErrorStream()));
String message;
while((message = reader.readLine()) != null) {
controleur.messageFromServeur("process : " + message);
}
}
catch(IOException ioe){
controleur.serverErrorOccured(ioe);
}
controleur.stopServeur();
controleur.messageFromServeur("Server Stopped");
}
/*
* Envoie une commande vers le serveur.
*/
public void sendCmd(String cmd) throws IOException{
cmdInterpreter.sendCmd(cmd);
}
... ... ... ...
}
public class ServerCmdInterpreter implements Runnable{
private InterfaceControleur controleur;
private Process serveurProcess;
private PrintWriter printer;
public ServerCmdInterpreter(InterfaceControleur controleur,
Process serveurProcess){
this.controleur = controleur;
this.serveurProcess = serveurProcess;
}
/*
* Démarre l'écoute
*/
public void listen(){
Thread th = new Thread(this);
th.start();
printer = new PrintWriter(
new PrintStream(
serveurProcess.getOutputStream()));
}
/*
* Ecoute en permanence les résultats d'une commande
*/
public void run(){
BufferedReader reader = new BufferedReader(
new InputStreamReader(
serveurProcess.getInputStream()));
try{
String message;
System.out.println("Ecoute les resultats des commandes");
while((message = reader.readLine()) != null){
controleur.messageFromServeur("interpreter : " + message);
}
}
catch (IOException ioe){
controleur.serverErrorOccured(ioe);
}
System.out.println("End Interpreter");
}
/*
* Envoie une commande vers le serveur.
*/
public void sendCmd(String cmd) throws IOException{
System.out.println("Commande : " + cmd);
printer.println(cmd);
printer.flush();
}
} |
Partager