(Zusammenspiel aller benötigter Komponenten)
(Aufgaben des Servers)
Zeile 25: Zeile 25:
 
=== Aufgaben des Servers ===
 
=== Aufgaben des Servers ===
  
... ToDo ...
+
Der Server-Dinest wird zunächst auf einem beliebigen Rechner im Netzwerk gestartet. Von nun an lauscht er auf einem festgelgten Port (oberhlab 1024) auf Verbindungs-Anfragen der Clients. Nach erfolgreicher Verbindung mit den Spiel-Clients nimmt er jeden Wunsch auf Zustands-Änderungen entgegen und verteilt sie an alle Clients, damit dies dann quasi zeitgleich diese Änderungen im Grafik-Fenster umsetzen können. Hierzu ist auf Server-Seite ein '''Protokoll''' nötig, das weiter unten genauer erläutert wird.
 
 
  
 
=== Aufgaben des Clients ===
 
=== Aufgaben des Clients ===

Version vom 23. Februar 2015, 19:03 Uhr

Demo-Netzwerk-Spiel

In diesem Tutorial sollst du an einem konkreten Beispiel ein tieferes Verständnis für eine Client-Server-Kommunikation im Rahmen eines einfachen Demo-Netzwerk-Spiels erhalten. Insbesondere werden folgende Aspekte genauer erklärt:

  • Die Aufgaben des Servers
  • Die Aufgaben des Clients
  • Ein Protokoll zur Koordination der Netzwerk-Kommunikation
  • Zusammenspiel aller benötigten Komponenten


Zusammenspiel aller benötigter Komponenten

Du siehst hier das Klassen-Diagramm des Demo-Netzwerk-Spiels. Alle rot gefärbten Klassen wirst du selbst erstellen. Alle schwarz gefärbten Klassen stellt dir die Engine Alpha zur Verfügung.

klassendiagramm demo netzwerk spiel.png

  • Die Spielfigur kannst du prinzipiell gestalten, wie du willst. Hier handelt es sich der Einfachheit halber um einen Kreis in dem der Name des Spielers als Text steht. Die Klasse Spielfigur erbt von der Klasse Knoten um die Einzelteile (Text und Kreis) in zu einer Gesamtheit zu gruppieren. Dadurch kann später die Spielfigur als ein Ganzes in die Wurzel des Grafik-Systems eingehängt werden. Auch ihre Bewegung kann so mit nur einem Befehl realisiert werden.
  • Die Klasse MyGameServer realisiert die Server-Instanz des Spiels. Bei ihr müssen sich die Clients anmelden bevor das Spiel beginnen kann. An diese Instanz sendet jeder Spieler später seine Änderungs-Wünsche. Der Server wird diese Wünsche dann an alle angemeldeten Clients verbreiten. Die Klasse MyGameServer hat ein Referenz-Attribut vom Typ Server (aus der Engine Alpha). Hierüber werden die Nachrichten an die Clients gesendet. Um auch Nachrichten empfangen zu können, implementiert die Klasse MyGameServer das Interface Empfaenger (der Engine Alpha), welches ihm einige Methoden vorschreibt zum Empfangen von Nachrichten. Jede dieser Methoden wird später automatisch aufgerufen werden, sobald von der Client-Seite eine Nachricht eingeht.
  • Die Klasse MyGame sorgt für die grafische Darstellung bei jedem der Clients. Deshalb muss sie von der (Engine Alpha) Klasse 'Game erben. Sie verfügt über zwei Referenz-Attribute vom Typ Spielfigur um die eigene Spielfigur und die des Gegners verwalten zu können. Beide Referenzen werden in einem Array verwaltet. Es gibt noch ein drittes Referenz-Attribut der Klasse MyNetworkClient. An dieses MyNetworkClient-Objekt werden die Änderungswünsche (Tastatur-Ereignisse) übergeben und von diesem werden auch die Antworten des Servers (Zustands-Änderungen der Spielfiguren) empfangen. Von der Klasse MyGame muss jeder Spieler eine Instanz erzeugen. (Vorher muss eine MyGameServer-Instanz erzeugt worden sein.)
  • Die Klasse MyNetworkClient ist auf der Client-Seite für die Kommunikation mit dem Server verantwortlich. Sie erbt von der (Engine Alpha) Klasse Client und verfügt dadurch über Methoden zum Senden von Nachrichten zum Server. Die ebenfalls von der Klasse Game geerbten (abstrakten) Methoden zum Empfangen von Nachrichten vom Server müssen mit konkreten Inhalten überschreiben werden. Die Klasse MyNetworkClient hat noch ein Referenz-Attribut vom Typ MyGame. Das ist das Grafik-Fenser, an das die Befehle bzgl. Zustands-Änderungen der Spielfiguren weiter geleitet wird.

Aufgaben des Servers

Der Server-Dinest wird zunächst auf einem beliebigen Rechner im Netzwerk gestartet. Von nun an lauscht er auf einem festgelgten Port (oberhlab 1024) auf Verbindungs-Anfragen der Clients. Nach erfolgreicher Verbindung mit den Spiel-Clients nimmt er jeden Wunsch auf Zustands-Änderungen entgegen und verteilt sie an alle Clients, damit dies dann quasi zeitgleich diese Änderungen im Grafik-Fenster umsetzen können. Hierzu ist auf Server-Seite ein Protokoll nötig, das weiter unten genauer erläutert wird.

Aufgaben des Clients

... ToDo ...


Ein Protokoll zur Koordination der Netzwerk-Kommunikation

... ToDo ...