Asteroids spielen über Internet
Die c't-Redaktion betreibt einen Server, gegen den man übers Internet Asteroids spielen kann -- außer Konkurrenz für den Wettbewerb! Damit kann man zum Beispiel testen, wie gut das eigene Programm mit Paketverlusten oder (womöglich gar wechselnder) Latenzzeit zurechtkommt.
Der Server hat die Adresse asteroids.heise.de (193.99.145.178) und lauscht auf Port 1979.
Sobald der Server von einem Client ein gültiges UDP-Paket mit Steuerinformationen empfangen hat (siehe Details zum Wettbewerb), schickt er ab diesem Zeitpunkt alle Bildschirminhalte an den Client und drückt automatisch nach einer kurzen (aber variablen) Wartezeit den Startknopf. Sollte der Client lange genug leben, trennt der Server nach exakt fünf Minuten (18.000 Frames) die Verbindung. Von jeder Partie wird automatisch eine Aufzeichnung in dem für diesen Zweck erfundenen Dateiformat (Version 2) angefertigt und auf dem Server abgelegt.
Aufzeichnungen und Highscores im Internet
Auf der Seite http://asteroids.heise.de/games/ kann man die zuletzt gespielten Partien und die Highscores bewundern.
Protokollerweiterung: busy und game over
Wenn ein Client den Server anspricht, während gerade ein anderer Client spielt, erhält er ein UDP-Paket mit dem Inhalt "busy x\r\n" zurück, wobei x die verbleibende Anzahl Frames bis zum Fünf-Minuten-Limit ist. Ungefähr nach dieser Anzahl von Frames sollte die Partie vorbei sein; sie kann natürlich früher enden, wenn ein schlechter Client spielt. Die Meldung "busy 0\r\n" bedeutet, dass der vorige Client abgehängt wurde, MAME jedoch noch auf das Spielende wartet.
Dem Client, der gerade spielt, schickt der Server ein Paket mit dem Inhalt "game over\r\n", wenn er die Verbindung zu ihm beendet hat.
Beide Pakete bringen die Referenz-Implementierung aus sample.zip mit der Meldung "Fehler 0 bei recvfrom()" zum Abbruch, weil sie ursprünglich nicht vorgesehen waren.
Protokollerweiterung: Name für die Highscore-Liste
Außer dem bekannten, 8 Byte langen "ctmame"-Paket versteht der Server jetzt auch ein genau 38 Byte langes Paket, das mit den 6 Byte "ctname" beginnen muss (nicht "ctmame"!), gefolgt von einem Freitext-String im UTF-8-Format (keine HTML-Entities!), aufgefüllt mit Nullbytes (bitte nicht mit Leerzeichen).
Wenn er dieses Paket nach Verbindungsaufbau, also nach einem ctmame-Paket, aber vor Beginn der eigentlichen Partie empfängt, speichert er den Namen mit ab und er erscheint später automagisch auf der Webseite mit den Spielergebnissen.
Achtung: Dieses Paket bringt die ursprünglich für diesen Wettbewerb bereitgestellte MAME-Version zum Abbruch, da ihr Empfangspuffer dafür nicht groß genug ist.
Quellcode des Servers
Für Neugierige gibts den Quellcode des zurzeit laufenden Servers zur Einsicht im Wiki. Der Server läuft unter Windows; dieser Quellcode lässt sich unter Linux/Mac? OS so nicht kompilieren.
