Liga

Wie schon versteckt [im Sulphur-Miniblog](https://clonkspot.org/forum/topic_show.pl?pid=5956#pid5956) angekündigt, ist die Clonkspot-Liga jetzt auf [github](https://github.com/clonkspot/league) verfügbar. Im Folgenden einige Dinge, die sich im Vergleich zur clonk.de-Liga geändert haben:

- Anderes Styling: Die Clonkspot-Liga baut auf Änderungen von Sven2 und Newton für die [OpenClonk-Liga](http://league.openclonk.org/) auf, die ich nur teilweise (z.B. Icons und Texte) rückgängig gemacht habe. Die Idee war ursprünglich, das Aussehen für Clonkspot nochmal komplett umzukrempeln, aber dazu kam es bisher noch nicht.
- Authentifizierung via mwforum: Recht offensichtlich für jeden, der schon mal in der Liga gespielt hat. Im Gegensatz zur OpenClonk-Liga ist man hier im Browser auch direkt in der Liga eingeloggt, sobald man sich am Forum anmeldet. Die Kernfunktionalität hier ist von Newton und bisher nicht veröffentlicht.
- Zusätzlich zu MySQL ist bei Clonkspot außerdem noch [Redis](http://redis.io/) als Cache im Einsatz. Die Motivation war in dem Fall weniger der mögliche Performance-Gewinn, sondern unerklärliche Encoding-Probleme beim Speichern in der Datenbank. Redis behandelt alles wie Binärdaten, was das Problem gelöst hat.

Leider sind solche Erweiterungen häufig nicht besonders einfach, weil man dem Code sein Alter deutlich anmerkt:

- Die Template-Engine [Smarty](http://www.smarty.net/) wird zwar noch unterstützt, ist aber definitiv weniger angenehm als aktuellere Alternativen. Einerseits enthält die offizielle Seite gefühlt kaum mehr Dokumentation als Werbung, andererseits wurden im Liga-Code einige [ungünstige Löcher](https://github.com/clonkspot/league/blob/ca47a5421a29d1fe4d19f846fe2c871cebd505d2/template/func_filter.tpl) (nur 14 Zeilen Code!!) damit gegraben.
- So wie die Templates in die Breite gehen, gehen die PHP-Klassen [in die Höhe](https://github.com/clonkspot/league/blob/ca47a5421a29d1fe4d19f846fe2c871cebd505d2/lib/game.class.php). So behandelt die game-Klasse nicht nur die Datenhaltung zu Spielen, sondern auch die dazugehörige Kommunikation mit CR und die Darstellung im Web-Frontend.
- PHP-Warnungen und Notices wurden generell großräumig ignoriert. Wenn man die aktiviert, bekommt man pro Aufruf oft mehrere Seiten an nicht definierten Variablen und anderen Problemen im Fehlerlog ausgegeben. Der ist damit als Entwicklungstool nicht zu gebrauchen.

Die eigentliche Motivation für diesen Post ist aber, über eine kleine Erweiterung zu berichten. Redis bietet eine [Pub/Sub](http://redis.io/commands#pubsub)-Schnittstelle an, über die Nachrichten live verbreitet werden können. Ich habe das in der Liga verwendet, um den “Lebenszyklus” eines Spiels (create/update/end/delete) live mitverfolgen zu können. [Diese Proof-of-Concept-Seite](https://clonkspot.org/league/game_events.php) gibt die dabei mitgegebenen Daten zu den Spielen im “Server-Sent Events”-Format als JSON kodiert aus.

Mithilfe einer Möglichkeit, alle aktuellen Spiele im selben Format zu bekommen (edit: jetzt als “init”-event mit drin), könnte damit eine Spieleliste implementiert werden, die die aktuellen Spiele perfekt live anzeigt - ohne dass man ständig neu laden muss und an das Flood-Protection-Limit gerät.

Wenn euch andere tolle Features am Ligaserver fehlen und ihr nicht vor dem Code zurückschreckt, nehme ich auch gerne Pull Requests an. :wink:

Es gibt jetzt auch [was zu gucken](https://clonkspot.org/games). :happy:

Das Aktualisieren funktioniert gut, aber es tauchen ab und an ungültige Einträge auf. Ich weiß nicht so ganz, woher die kommen.