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ß!