(Zusammenspiel aller benötigter Komponenten)
(Zusammenspiel aller benötigter Komponenten)
Zeile 14: Zeile 14:
  
 
[[Datei:klassendiagramm_demo_netzwerk_spiel.png]]
 
[[Datei: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 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 {{Doc|ea/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 ===
 
=== Aufgaben des Servers ===

Version vom 23. Februar 2015, 18:37 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 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

... ToDo ...


Aufgaben des Clients

... ToDo ...


Ein Protokoll zur Koordination der Netzwerk-Kommunikation

... ToDo ...