Sulphur

Hi zusammen, das hier ist ein Miniprojekt von mir und geht eher an die Entwickler:

ich habe eine kompakte Library für PHP geschrieben, um das Parsen von Spielreferenzen des Masterservers etwas einfacher zu machen, alles bisher ist unter GitHub und auch von Packagist für Composer erhältlich ($ composer require beheh/sulphur). Ich kann mir vorstellen dass nicht viele etwas damit anfangen können, aber unter anderem kann man damit ähnliche Dinge wie die CMC-Seite tun und laufende Spieler filtern, man sollte sich dann aber vielleicht über Caching Gedanken machen.

Was noch nicht drin ist, aber nach den Diskussionen neulich auf jeden Fall kommt, ist korrektes Behandeln des Encodings. Mein alter Masterserver hatte damit auch immer Probleme, und das OpenClonk-Liga-System scheint auch seltsam damit umzugehen - daher versuche ich eine Referenzimplementierung für das Parsen von Referenzen zu bauen. Weiterhin kommen noch ein paar Methoden hinzu, um direkt auf Ressourcen und Spieler zuzugreifen, damit man z.B. schnell leere Szenarien oder bestimmte Hosts ignorieren kann.

Beispielcode ist auch in der Readme, aber die Grundlagen sind:

// fetch masterserver response
$response = Sulphur\ResponseFactory::fromUrl(‘league.clonkspot.org’);

// iterate through all games currently in lobby
foreach($response->where(‘State’)->is(‘Lobby’) as $reference) {
    echo $reference->Title.’ is now open!’;
}

// show comment of first game containing “CMC” (case insensitive)
$references = $response->where(‘Title’)->contains(‘cmc’, true);
echo $references[0]->Comment;

// show title of first running league game
$references = $response->where(‘State’)->is(‘Running’)->where(‘League’)->exists();
echo $references[0]->Title;


Falls es Fragen, Feedback oder Wünsche gibt einfach hier reinschreiben.

Sehr schickes Ding! Und sehr praktisch. Super sowas bereitzustellen.
Imo Top! :slight_smile:

Ich hatte schon drüber nachgedacht, ob es nicht sinnvoll wäre, die Masterserver-Antworten alternativ auch als JSON bereitzustellen. Das würde solche Anwendungen viel einfacher machen, da man nicht erst noch das etwas seltsame Clonk-ini-Format parsen muss.

Klar, aber das müsste erstmal jeder Masterserver machen. Es ist eine Sache wenn ein spezieller Server das macht, aber eine Library wird immer dann die meisten und korrektesten Daten liefern wenn sie das gleiche Format "spricht", das auch die Clonk-Engine nutzt und damit per Definition auf jedem Clonk-Masterserver funktioniert. So kompliziert ist das Format dann auch wieder nicht.
Wenn ihr aber speziell für Clonkspot z.B. eine Live-Darstellung bauen wollt die direkt per JSON live den Masterserver abfrägt würde sowas imho Sinn machen.

Naja, tatsächlich gibt es ja bald nur noch eine Masterserver-Implementierung, die sowohl für OC als auch für CR im Einsatz ist. Für obskure Alternativserver ist der Nutzen von automatisierten Abfragen eher gering.

>obskure Alternativserver


Solange der Source dafür nicht öffentlich ist sehe ich immer noch akuten Bedarf für alternative Masterserver. So toll das Clonkspot/OpenClonk-Projekt auch sind, ein offener Masterserver ist meiner Meinung nach für ein offenes Spiel erforderlich, vor allem wenn sich die Implementierung in Zukunft ändert und um für CR z.B. alternative Ligen (z.B. für Wettbewerbe) bereitzustellen (auch, falls Clonkspot eines Tages unerwartet so wie Clonk.de aufhören sollte). Es geht mir im Rahmen von OC auch etwas um das Prinzip der Entwicklung eines "Open"-Spiels.
Ich hatte auch schon mehrfach im OpenClonk-Forum nach einer Veröffentlichung des Source gefragt, aber weil das anscheinend teilweise noch unter RWD-Lizenz steht habe ich dort immer nur negatives Feedback bekommen.

Und so obskur alternativer Masterserver-Source auch sein kann, ohne eine offizielle Implementierung ist das immer noch besser als was man sonst hat - nämlich gar nichts.

>(auch, falls Clonkspot eines Tages unerwartet so wie Clonk.de aufhören sollte)


Niemals!!

Der Profi würde jetzt kommen und einfach JSON Support in die Clonkengine ein bauen und alles auf JSON umstellen!!!

Ich hatte eher an protocol buffers gedacht, aber ja, die Idee hatte ich auch schon. :tongue:

Kein Stress - der Ligacode ist bereits frei lizensiert und wird auch in näherer Zukunft veröffentlicht werden.

Wobei da der Gewinn ja nicht so groß ist, weil JSON-Parsing nicht schon direkt integriert ist.

Gibt ja genug davon

Ich hab das ganze mal wieder aktualisiert, ein paar Tests hinzugefügt und Fehler behoben. Im OpenClonk-Forum war neuerdings der Wunsch nach einer Masterserver-Anzeige auf der Startseite gekommen, ich hatte jedoch leider noch keine Zeit, mich damit zu beschäftigen. Ursprünglich wollte ich das direkt mit Zugriff auf die Masterserver-Datenbank machen, aber ich glaube dass das mit Sulphur einfacher und modularer extern geht. Falls da jemand was bauen will freuen die sich bei OpenClonk für ihre Startseite bestimmt. Die Version ist jetzt außerdem auf 1.0.0 gelandet, also sehe ich das ganze als stabil an.

>Sind Sie sicher, dass Sie wirklich auf eine so alte Nachricht antworten wollen?


Ja!

Ich habe den Code tatsächlich schon veröffentlicht. Eigentlich wollte ich auch zuerst noch etwas aufräumen, aber dazu werde ich wohl erst mal nicht kommen.

Eine Idee für die Zukunft ist, Redis nicht nur als Cache zu verwenden, sondern Spielupdates via dessen Pub/Sub System zu verbreiten und dann einen Websockets-Endpoint zu haben, an dem man live die Spiele bekommt.

>Eine Idee für die Zukunft ist, Redis nicht nur als Cache zu verwenden, sondern Spielupdates via dessen Pub/Sub System zu verbreiten und dann einen Websockets-Endpoint zu haben, an dem man live die Spiele bekommt.


Oder ZMQ!

Ja, ginge natürlich auch. Redis ist nur tatsächlich schon in Einsatz in der Clonkspot-Liga für das Rate-Limiting und um die Spielelisteneinträge zu cachen. In der alten Liga ging ersteres durch einen seltsamen PHP-Opcode-Cache, der mittlerweile nicht mehr existiert und letzteres in MySQL, was bei uns zu Encoding-Problemen geführt hat.

>Ich habe den Code tatsächlich schon veröffentlicht.


Wuhu, na also!

>Install Sulphur by using composer.


Was ist, wenn man Composer nicht hat? Einfach die ZIP runterladen? Und wofür ist der Eintrag auf packagist.org?

Dann installierst du zuerst Composer? Ernsthaft, es gibt eigentlich keinen guten Grund auf eine vernünftige Abhängigkeitsverwaltung zu verzichten.