Upload
suse-bornhorst
View
106
Download
1
Embed Size (px)
Citation preview
18&3 GSG Version 1.1718&3 GSG Version 1.17
18&3 GSG V- 1.17GameServer + GUI
programmiert April-Juni 2003 von Knut Riechmann
als Teil des Software-Projektes „JAVA NEWS & MUSIC“ SS03
Fachhochschule Lippe und Höxter
18&3 GSG Version 1.1718&3 GSG Version 1.17
INHALT: 1 Die Idee
1.1 Ein erstes Layout vom 12.04.2003
1.2 Die Aufgabenverteilung
2 Die Server Applikation: 18&3-GSG
2.1 Charakterisierung
2.2 Die grafische Benutzeroberfläche 1
Die grafische Benutzeroberfläche 2
Die grafische Benutzeroberfläche 3
Die grafische Benutzeroberfläche 4
2.3 Aufbau der Klassen a) GameServerGUI.class
b) GameServer.class
c) GameVerbindung.class
d) GameUser.class
3 Die Umsetzung in JAVA
3.1 UML-Klassendiagramm: Vererbung
UML-Klassendiagramm: Assoziationen
3.2 a) Auszug aus der Klasse GameserverGUI
b) Auszug aus der Klasse GameServer
c) Auszug aus der Klasse GameVerbindung
Die Methode verbinden(int port)
d) Auszug aus der Klasse GameUser
e) Teile des Client-Moduls 1
Teile des Client-Moduls 2
4 Ein paar Anmerkungen...
18&3 GSG Version 1.1718&3 GSG Version 1.17
1) Die Idee
Geboren wurde die Idee ein netzwerkfähiges Spiel
zu programmieren bei der Erstellung eines ersten
Layouts für die JAVA NEWS & MUSIC Seite.
Als zu programmierendes Spiel wurde dann eine
Variante des bekannten Kartenspiels „17 und 4“
ausgewählt.
18&3 GSG Version 1.1718&3 GSG Version 1.17
1.1) Ein erstes Layout vom 12.04.2003
18&3 GSG Version 1.1718&3 GSG Version 1.17
1.2) Die Aufgabenverteilung
Aufgrund der Größe des Projektes haben wir
die Aufgaben in zwei Bereiche gegliedert:
Christian Kreienbrinck programmierte das eigentliche
Spiel als JAVA-Applet.
Der Netzwerkteil wurde von mir programmiert:
a) Client Modul, das in das Applet integriert werden konnte
b) Eigenständige JAVA-Server-Applikation
mit grafischer Benutzeroberfläche
18&3 GSG Version 1.1718&3 GSG Version 1.17
2) Die Server-Applikation: 18&3-GSG
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.1) Die Server-Applikation: 18&3 GSG
Charakterisierung:
- besteht aus vier Klassen
- grafische Benutzeroberfläche
- voll konfigurierbar
- drei Spiele gleichzeitig möglich
- absturzsicher durch Selbst-Restart
- indirekte Geschwindigkeitssteuerung
- automatische Spielernamen-Bestimmung
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.2) Die Server-Applikation: 18&3 GSG
Die grafische Benutzeroberfläche 1
Aktuelle Konfiguration
LOG Infos
Status-Zeile
Menü-Leiste
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.2) Die Server-Applikation: 18&3 GSG
Die grafische Benutzeroberfläche 2
Es gibt die Möglichkeit sämtliche
Servermeldungen in einer LOG-Datei zu speichern. Das Dateiauswahlfenster wurde mit
der SWING-Komponente JFileChooser realisiert.
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.2) Die Server-Applikation: 18&3 GSG
Die grafische Benutzeroberfläche 3
Sehr viele Parameter der Server
lassen sich konfigurieren.
Mit TextField und JButton konnte
das realisiert werden.
Falsche Eingaben werden erkannt.
Konfigurationsmodus
18&3 GSG Version 1.1718&3 GSG Version 1.17
Einfache Info- und Hilfefunktionen wurden mit eigenen JFrame-Objekten realisiert.
2.2) Die Server-Applikation: 18&3 GSG
Die grafische Benutzeroberfläche 4
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.3) Die Server-Applikation: 18&3 GSG
Aufbau der Klassen:
a) class GameServerGUI
- stellt die grafische Benutzeroberfläche bereit
- ist Erbe der SWING-Klasse JFrame
- Realisierung mit SWING-Komponenten
- Event-Handling mit Interface ActionListener
- läuft als eigenständiger Thread
- ruft eine Instanz der Klasse GameServer auf
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.3) Die Server-Applikation: 18&3 GSG
Aufbau der Klassen:
b) class GameServer
- verwaltet den Start / das Sperren von Servern
- ist Erbe der Klasse Thread
- läuft als eigenständiger Thread
- ruft Instanzen der Klasse GameVerbindung auf
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.3) Die Server-Applikation: 18&3 GSG
Aufbau der Klassen:
c) class GameVerbindung
- stellt jeweils einen Server dar
- ist Erbe der Klasse Thread
- läuft als eigenständiger Thread
- arbeitet mit Inputstream und Outputstream
- ruft Methoden der Klasse GameUser auf
18&3 GSG Version 1.1718&3 GSG Version 1.17
2.3) Die Server-Applikation: 18&3 GSG
Aufbau der Klassen:
d) class GameUser
- kann anhand von IP-Adressen aus Dateinamen
die Spielernamen herausfiltern
- stellt einen Dienst für die Klasse GameVerbindung
bereit
18&3 GSG Version 1.1718&3 GSG Version 1.17
3) Die Umsetzung in JAVA
Im Folgenden soll auf die Umsetzung der Programmierung
in JAVA eingegangen werden. Da der gesamte Code der
4 Klassen aus genau 1036 Zeilen besteht, soll hier aus Zeitgründen
nur auf elementare Stellen eingegangen werden.
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.1) Die Umsetzung in JAVA
UML-Klassendiagramm 1: Vererbung
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.1) Die Umsetzung in JAVA
UML-Klassendiagramm 2: Assoziationen
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.2) Die Umsetzung in JAVA
1. Übergabe der Konfigurationsparameter
2. Neuer THREAD: GameServer
a) Auszug aus der Klasse GameServerGUI
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.2) Die Umsetzung in JAVA
b) Auszug aus der Klasse GameServer
1. Überwachung, ob neuer Server gestartet werden darf
2. Start eines neuen Threads: GameVerbindung
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.2) Die Umsetzung in JAVA
c) Auszug aus der Klasse GameVerbindung
Versucht neue Verbindung
aufzubauen
Liegen Daten an, werden diese
weitergeleitet.
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.2) Die Umsetzung in JAVA
c) Auszug aus der Klasse GameVerbindung
Die Methode:
verbinden(int port)
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.2) Die Umsetzung in JAVA
d) Auszug aus der Klasse GameUser
- Filterfunktion
- Dienstleistung
18&3 GSG Version 1.1718&3 GSG Version 1.17
e) Teile des Client-Moduls 1
3.2) Die Umsetzung in JAVA
import java.io.*;import java.net.*; ----------------------------------------------------------------------------------------Socket Verbindung;DataInputStream Eingangsstrom;PrintStream Ausgangsstrom;Thread lesethread; ----------------------------------------------------------------------------------------Verbindung = new Socket("192.168.0.1",6666);Eingangsstrom = new DataInputStream(Verbindung.getInputStream());Ausgangsstrom = new PrintStream(Verbindung.getOutputStream()); ----------------------------------------------------------------------------------------lesethread = new Thread(this);lesethread.start(); ----------------------------------------------------------------------------------------
- Java.io und java.net
- Socket + Ströme
- Eigener Thread
- Verbindung aufbauen
- Thread starten
18&3 GSG Version 1.1718&3 GSG Version 1.17
3.2) Die Umsetzung in JAVA e) Teile des Client-Moduls 2// In diesem Thread wird dauernd auf Daten gewartet public void run() { String Eingangsdaten; try { while (true) { Eingangsdaten = Eingangsstrom.readLine(); if(Eingangsdaten!=null) { Empfang = new Button(); Empfang.setLabel("Eingegangene Daten: "+Eingangsdaten); Fenster.add(Empfang); Fenster.show(); -------------------------------------------------------------------------------------------------------------------
public void actionPerformed (ActionEvent Ereignis) { ... if (Ereignis.getSource() == Abschicken) { Nachricht = Eingabefenster.getText(); Ausgangsstrom.println(Nachricht); } ... } }
- run()-Methode
- readLine()-Methode
- Label + Button
- Interface ActionListener
- ActionEvent-Objekt
- println()-Methode
18&3 GSG Version 1.1718&3 GSG Version 1.17
4) Ein paar Anmerkungen ...
Hürden, die zu überwinden waren:
- Sicherheitsaspekte bei JAVA-Applets Testphase ohne Java News & Music - Server
- Servergeschwindigkeit Performance contra Benutzerfreundlichkeit
- Erfahrungen mit Excelsior JET
- Synchronisation Client/Server Informationsaustausch
18&3 GSG Version 1.1718&3 GSG Version 1.17
ENDE© 2003 by Knut Riechmann, Lemgo