Netzwerkschnittstelle für Othello-Implementationen


Es werden mithilfe von ObjectInputStream und ObjectOutputStream (aus java.io)
Objekte über eine TCP-Verbindung ausgetauscht. Zulässige Objekte sind dabei
SpielInformation (samt enthaltenem Spielertyp) und NetworkMove aus diesem Paket
sowie java.lang.Boolean. Der Versand anderer Objekte und primitiver Datentypen
ist unzulässig.

Dem Server kommt die Aufgabe zu, die Spielteilnehmer festzulegen.


Zeitlicher Ablauf:

1. Der Server wartet auf einem TCP-Port auf eingehende Verbindungen.
   Standardmäßig muss dies Port 61541 sein, der Benutzer sollte jedoch die
   Möglichkeit haben einen anderen Port anzugeben.
   
2. Der Client öffnet eine Verbindung zum Server. Der Benutzer muss hierzu die
   Möglichkeit haben, Name oder IP-Adresse sowie Port des Servers anzugeben.
   Die Auswahl des clientseitigen Port ist beliebig (kann dem Betriebssystem
   überlassen bleiben).
   
3. Der Server sendet die SpielInformationen, die aus Sichtweise des Clients
   ausgefüllt sein müssen.
   
4. Der Client antwortet mit einem Boolean, der den Wert true haben muss.

5. Die Verbindung befindet sich jetzt im Spielzustand. Der jeweils am Zug
   befindliche Spielteilnehmer sendet einen NetworkMove, der jeweils andere
   wartet auf Eingang eines solchen. Hierbei ist zu berücksichtigen, dass u.U.
   einem Spieler mehrere aufeinanderfolgende Züge zustehen können.
   
6. Sobald das Spiel beendet ist wird die Verbindung geschlossen. Dies kann
   durch beide Spielteilnehmer unabhängig erfolgen, die Reihenfolge ist
   unerheblich.
   
   
Die Spielteilnehmer müssen bei eingehenden Objekten prüfen, ob das Objekt vom
gerade erwarteten Typ ist und ob die enthaltenen Daten korrekt sind; bei
eingehenden NetworkMoves müssen insbesondere Sequenznummer und die Angabe zum
nächsten Spieler sorgfältig geprüft werden. Wenn ein Fehler erkannt wird muss
die Verbindung geschlossen werden, außerdem sollte der Benuzer durch eine
möglichst präzise Fehlermeldung informiert werden.

