/**
* Eine Klasse, die das Verhalten eines Client/Server Systems lokal imitiert.
* <br>
* Besitzt die gleichen Schnittstellen wie die Netzwerkversion (auch wenn ggf.
* nicht alle Parameter benötigt werden) und kann so einfach gegen diese
* ausgetauscht werden.<br>
* Genauso wie bei der Netzwerk version, ist es zunächst nötig, einen Server zu
* erstellen, bevor der Client lokal dazustößt. <br>
* Im Gegensatz zur Netzwerkversion ist es hier möglich, dass der Client-Prozess
* Änderungen an den Serverdaten durchführt. Das sollte in der Praxis jedoch
* nicht gemacht werden, da spätestens beim Austausch der Klassen ein Problem
* entsteht!
*
* @author Andre Greubel
*/
public class SpielDaten {
private static double[] clientDoubles;
private static int[] clientInts;
private static String[] clientStrings;
private static double[] serverDoubles;
private static int[] serverInts;
private static String[] serverStrings;
private static SpielDaten instance;
private SpielDaten(int serverInts, int serverDoubles, int serverStrings, int clientInts, int clientDoubles, int clientStrings) {
this.serverInts = new int[serverInts];
this.serverDoubles = new double[serverDoubles];
this.serverStrings = new String[serverStrings];
for (int i = 0; i < serverStrings; i++) {
this.serverStrings[i] = "";
}
this.clientInts = new int[clientInts];
this.clientDoubles = new double[clientDoubles];
this.clientStrings = new String[clientStrings];
for (int i = 0; i < clientStrings; i++) {
this.clientStrings[i] = "";
}
}
public double getClientDouble(int clientNr, int doubleNr) {
return clientDoubles[doubleNr];
}
public int getClientInt(int clientNr, int intNr) {
return clientInts[intNr];
}
public String getClientString(int clientNr, int stringNr) {
return clientStrings[stringNr];
}
public int getMyId() {
return 0;
}
public double getServerDouble(int nr) {
return serverDoubles[nr];
}
public String getServerString(int nr) {
return serverStrings[nr];
}
public int getServerInt(int nr) {
return serverInts[nr];
}
public void setMyDouble(int nr, double content) {
clientDoubles[nr] = content;
}
public void setMyInt(int nr, int content) {
clientInts[nr] = content;
}
public void setMyString(int nr, String content) {
serverStrings[nr] = content;
}
public void setServerDouble(int nr, double content) {
serverDoubles[nr] = content;
}
public void setServerInt(int nr, int content) {
serverInts[nr] = content;
}
public void setServerString(int nr, String content) {
serverStrings[nr] = content;
}
public static SpielDaten starteServer(int serverInts, int serverDoubles, int serverStrings, int clientInts, int clientDoubles, int clientStrings) {
if (instance != null) {
throw new IllegalArgumentException("Server läuft bereits!");
}
instance = new SpielDaten(serverInts, serverDoubles, serverStrings, clientInts, clientDoubles, clientStrings);
return instance;
}
public static SpielDaten verbindeMitServer(String ip) {
if (instance == null) {
throw new IllegalArgumentException("Verbindung zum Server nicht möglich: Server läuft noch nicht!");
}
return instance;
}
}
|