Template Workshop 3: Internetlist Template


In diesem Workshop lernen Sie wie eine Liste von Internetservern Ihres Spiels erstellt werden kann. Um dieses Template benutzen zu können, wird ein Server der PHP und MYSQL unterstützt, benötigt (es können auch Server von Freehostern oder ein lokaler Server verwendet werden).

Die Theorie dahinter

Die Serverliste wird in einer MYSQL Datenbank, welche durch einen Webserver erreicht werden kann, gespeichert.
Wenn ein neuer Server online geht, sendet er seine Informationen via HTTP (Protokoll welches im World Wide Web verwendet wird) zum Webserver. Der Webserver führt dann ein php Skript aus, welches die Daten zum MYSQL Server weiterleitet (welcher am selben PC läuft). Dann fügt der MYSQL Server den Eintrag zur Datenbank hinzu.
Wenn Spieler nach Server suchen kontaktieren sie zuerst den Webserver. Dieser führt wieder ein php Skript aus welches den MYSQL Server kontaktiert. Dieser antwortet mit dem gesamten Inhalt der Datenbank. Der Webserver leitet diese Daten dann zum Spieler weiter.

So sieht die Tabelle mit den Servern in der Datenbank aus:

#Ip
int(10)
#Port
smallint(5)
Name
text
Password
tinyint(1)
NumPlayers
tinyint(3)
MaxPlayers
tinyint(3)
Map
text
UpdateTimestamp
timestamp
... ... ... ... ... ... ... ...


Wenn Sie bereits Erfahrung im Bereich Datenbankverarbeitung haben: Der Primärschlüssel ist eine Kombination von Ip und Port. Ip ist eine 4 Byte große Nummer die die Ip Adresse repräsentiert.

Die Ip wird automatisch durch das php Skript erkannt.
Port ist die Portnummer welche benutzt wurde als der Server gestartet wurde.
Name ist der Name des Servers.
Wenn Password 1 ist, ist der Server Passwortgeschützt. Ansonsten ist es 0.
NumPlayers ist die Anzahl der mit dem Server verbundenen Spieler und MaxPlayers ist die maximale Anzahl an erlaubten Spielern am Server.
Map ist der Name der Map die momentan gespielt wird.

Das interessanteste Feld ist UpdateTimestamp. Es enthält den Zeitpunkt an dem der Eintrag das letzte mal geupdatet wurde. Wenn ein Online-Game-Server zur Liste hinzugefügt wurde, muss er seinen Eintrag von Zeit zu Zeit updaten. Ansonsten wird er automatisch von der Liste gelöscht sobald ein Spieler die Liste das nächste mal anfordert. Dadurch sind Server die abgestürzt sind oder deren Internetverbindung verloren gegangen ist nicht ewig in der Liste.
Das Updateintervall kann wie gewünscht eingestellt werden. Wichtig: Je höher die Updaterate, desto höher der produzierte Traffic. --> ein besserer Server mit einer besseren Internetleitung wird benötigt.

Die Datenbank und die php Skripts sind betriebsfertig. Sie müssen nur am Server importiert werden. Auch die Verbindung zum Webserver über http_post() ist bereits in einer fertigen Lite-C Datei implementiert. Diese kann über ein einfaches Interface angesprochen werden.

Konfigurieren des Servers

Als Beispielkonfiguration wird ein lokaler Testserver eingerichtet:

Für lokales Testen empfehlen wir XAMPP. XAMPP ist ein frei verfügbares Paket welches einen Webserver (Apache) und einen MYSQL Server zur Verfügung stellt. Die neuste XAMPP Version kann von der offiziellen Homepage heruntergeladen werden: here
Laden Sie den Windows Installer herunter und folgen Sie Schritt für Schritt den Anweisungen des Setups.

Nach einer erfolgreichen Installation, öffnen Sie das Control Panel und starten Sie den MYSQL Server:



Gratulation, Sie haben nun einen laufenden Webserver und MYSQL Server auf ihrem System. Im nächsten Schritt werden alle Einstellungen zur Verwendung des Templates getroffen:

Als erstes muss die Datenbank erstellt werden. Dazu öffnen Sie den Browser und geben folgenden Link ein (oder klicken Sie auf den Link): http://localhost
Wenn der Apache Server läuft, sollten Sie nun folgendes Bild sehen:



Klicken Sie nun auf phpMyAdmin wodurch sich die Konfigurationsoberfläche des MYSQL Servers öffnet.



Klicken Sie nun auf Import. Wählen Sie die Datei db_server.sql welche sich im Ordner des Templates unter "ServerInstallation/mysqlServer" befindet aus und klicken Sie GO.



db_server(1) sollte nun auf der linken Seite des folgenden Bilds sein. Klicken Sie darauf, sodass wir die Datenbank konfigurieren können:



Würde bereits ein Server in der Tabelle eingetragen sein, könnte der Inhalt der Tabelle durch klicken des Buttons neben tb_server angezeigt werden:



Behalten Sie dies im Hinterkopf, Sie werden dies später benötigen.

Im letzten Schritt müssen die .php Dateien, welche den Zugang zur Datenbank über das Internet ermöglichen, in den korrekten Ordner kopiert werden. Öffnen Sie dafür den "webServer" Ordner (des Templates) und kopieren Sie den gesamten Ordner genannt "serverlist" nach C://xampp/htdocs/.

Das wars! Der Server kann nun verwendet werden. Im nächsten Schritt kann die Liste ausprobiert werden:

Das Beispielprojekt

Das Template kommt mit einem Beispielprojekt welches sich im "Example" Ordner befindet. Starten Sie die Applikation "ITemp_Example.exe" auf dem selben Rechner wie der auf dem der Server läuft.



Drücke Sie [A] um einen Server zur Liste hinzuzufügen. Öffnen Sie nun phpMyAdmin erneut und klicken Sie auf db_server (auf der linken Seite des Bildschirms) und klicken Sie dann den Buttton "show" neben tb_server. Wenn alles korrekt gelaufen ist, sollten Sie den Server nun in der Tabelle sehen.

Wenn Sie [G] drücken, wird der gesamte Inhalt der Tabelle im Testprojekt angezeigt.

Wenn Sie [I] drücken, wird die Anzahl der Spieler am Server erhöht. Nach ungefähr 30 Sekunden wird die Änderung in der Tabelle sichtbar, da der Eintrag nur alle 30 Sekunden geupdated wird (dies kann jedoch geändert werden). Drücken Sie nach 30 Sekunden Refresh im phpMyAdmin Fenster. Die Anzahl der Spieler des Servers sollte sich um 1 erhöht haben. Auch durch das Drücken von [G] sollte die Änderung sichtbar sein.

Wenn Sie [R] drücken, wird der Server von der Liste entfernt. Wenn Sie sich den Inhalt der Tabelle mit phpMyAdmin ansehen, wird Ihnen auffallen, dass der Server trotzdem in der Tabelle steht?! Auch wenn Sie ein paar Minuten warten! Drücken Sie jedoch [G] um die Tabelle einzusehen, werden Sie bemerken, dass der Eintrag verschwunden ist. Das ist deshalb, weil GetList.php die gesamte Tabelle durchläuft und alle Einträge die seit einer gewissen Zeit nicht geupdatet wurden (standardmäßig 3 Minuten), entfernt. Das Drücken von [R] stoppt nur das Updaten des Servereintrags.

Wie fügt man das Template in ein Projekt ein?

Als erstes müssen die Skriptdateien in den Projektordner kopiert werden. Die Skriptdateien sind im "Lite-C" Ordner.

Danach muss folgende Zeile #include "Serverlist.h" nach dieser Zeile #include "anet.h" eingefügt werden.

Sie haben nun vollen Zugriff auf alle Template Funktionen.

Ein kurzer Überblick

Das Template muss zuerst mit folgender Funktion initialisiert werden:



Das ServerListEntry Struct:
Dieses Struct repräsentiert einen Eintrag in der Serverliste. Wenn Sie einen Server eröffnen möchten, welcher zur Liste hinzugefügt werden soll, muss das Struct mit Informationen über den Server gefüllt werden. Danach muss das Struct durch die Funktion LanTemp_AddServer() (LAN Template) oder ITemp_AddServer() (Internet Template) veröffentlicht werden (--> wird in die Liste eingetragen).



Das ServerList Struct:
Dieses Struct repräsentiert die gesamte Serverliste und wird durch LanTemp_GetList() oder ITemp_GetList() befüllt.



Wenn Sie einen Beispielcode benötigen, sehen Sie in ITemp_Example.c. Für mehr Informationen über die Templatefunktionen sehen Sie in Serverlist.h.

Wichtige Einstellungen

Es gibt ein paar wichtige Einstellungen die nicht durch ITemp_Init() gesetzt werden können:

ITEMP_UPDATERATE
Intervall mit dem ein Servereintrag aktuallisiert werden soll. Es ist in Serverlist.h definiert.

TIMEOUT
Wenn ein Servereintrag nicht innerhalb dieser Zeit geupdatet wird, wird der Eintrag von der Liste gelöscht. Diese Einstellung ist in GetList.php definiert.
ITEMP_UPDATERATE muss kleiner als die Hälfte von TIMEOUT sein.

SQL_USERNAME
Der Benutzername, der zum Verbinden mit dem MYSQL Server benutzt werden soll. (GetList.php und AddServer.php)

SQL_PASSWORD
Das Passwort, welches zum Verbinden mit dem MYSQL Server benutzt werden soll. (GetList.php und AddServer.php)


Viel Spaß!