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