Template Workshop 2: Lanlist Template
In diesem Workshop werden Sie lernen, wie man Server innerhalb des
LAN suchen kann. Das Template für die Serversuche über LAN
und das für die Suche über das Internet sind kombiniert.
Beide haben nahezu das gleiche Interface und sind einfach zu verwenden.
Das Internet-Template wird im nächsten Workshop genauer behandlet.
Funktionen des Internet-Serverlist-Templates starten mit
ITemp_ und Funktionen des LAN-Serverlist-Templates mit
LanTemp_.
Das gesamte Template ist open source und kann sehr einfach
für Ihre Zwecke angepasst werden. Wenn Sie Bugs oder mögliche
Verbesserungsmöglichkeiten entdecken, teilen Sie uns diese doch
bitte per Mail oder einem Forums Eintrag im Gamestudio Forum mit!
Die Theorie dahinter
Neben dem normalen Spielserver (welcher durch
enet_init_server() gestartet wurde) wird ein schlanker UDP Server welcher
auf einen anderen UDP Port lauscht gestartet. Wenn Spieler nach Servern
suchen, wird ein "Suchpaket" gebroadcastet (d.h. Senden zu jedem Teilnehmer
im Netzwerk). Jeder Spieleserver der diesen schlanken UDP Server
laufen hat, antwortet auf den Broadcast mit Informationen über
den Server wie dem Servernamen, die Anzahl der Spieler,...
Der Spieler der das "Suchpaket" gesendet hat, wartet eine gewisse
Zeitspanne ab und sammelt alle Antwortpakete die von den Spielservern
kommen. Nach Ablauf der Zeitspanne werden alle Server aufgelistet.
Danach kann die gesamte Liste auf dem Bildschirm dargestellt werden
und der gewünschte Server kann ausgewählt werden.
Da der Spieler nur Server des selben Spiels finden sollte,
enthält das "Suchpaket" einen String der festlegt von welchem
Spiel das Paket gesendet wurde. Der erste Teil des Strings ist der
user_name auf dem die Gamestudio Edition registriert ist. Der zweite
Teil kann durch den Programmierer festgelegt werden. Es wird empfohlen
den Namen des Spiels an dieser Stelle zu verwenden. Der gesamte
String könnte also folgendermaßen aussehen:
"Peter SoxbergerCoolest ANet Game 2".
Die Zeit die der Server zum Antworten auf das "Suchpaket" benötigt
wird aufgezeichnet. Der gemessene Wert wird in dem Feld "Ping" (in ms)
des Eintrags in der Serverliste gepseichert.
Das Beispielprojekt
Das Template enthält ein Beispielprojekt welches im Ordner
"Example" gefunden werden kann. Starten Sie die Applikation
"LanTemp_Example.exe".
Drücken Sie [A] um einen Server zu starten. Öffnen Sie
die Applikation erneut (schließen Sie jedoch nicht die
aktuell laufende) und drücken Sie [G]. Nach 3 Sekunden sollte
der Server in der Liste erscheinen. Wechseln Sie nun in die Server-
Applikation und drücken Sie ein paar mal [I]. Dies erhöht
die Anzahl der Spieler des Servers. Wechseln Sie zurück und
drücken Sie erneut [G]. Die Anzahl der Spieler sollte sich
nun verändert haben. Wenn Sie mehr als einen Computer zuhause
haben und diese über LAN miteinander verbunden sind, können
Sie den Server auch auf einem anderen PC starten.
Wenn Sie [R] drücken wird der Server gestoppt und er kann
nicht mehr gefunden werden.
Bitte beachten Sie, dass es nicht möglich ist einen
Server und eine Suche in der selben Applikation zu starten!
Wie fügt man das Template in ein Projekt ein?
Als erstes müssen die Skriptdateien in den Hauptordner des Projekts
kopiert werden. Die Skriptdateien befinden sich im "Lite-C" Ordner.
Danach fügen Sie diese Zeile
#include "Serverlist.h" nach dieser Zeile
#include "anet.h" ein.
Nun haben Sie vollen Zugriff auf die Template Funktionen.
Ein kurzer Überblick
Als erstes muss das Template immer durch den Aufruf 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.
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
LanTemp_Example.c. Für mehr Informationen über die
Templatefunktionen sehen Sie in Serverlist.h.
Viel Spaß!