Entwickler Brief #02


  • Developers

    Zurück aus dem Urlaub, und wir starten direkt in die Bugfixing-Phase…

    Dieser Blogeintraf wird ein wenig technischer und wird einige der Herausforderungen behandeln, die sich so ergeben, wenn man Probleme im Mehrspieler-Modus beheben will, die nur unter bestimmten Umständen auftreten und deshalb nicht so leicht nachzustellen sind.

    Was steht an für Version 1.0.25? Wir arbeiten hart daran, die aktuelle Code-Basis zu verbessern, Bugs und Abstürze zu beheben und die Performance im Allgemeinen zu verbessern. Momentan liegt der Fokus darauf, unsere Bug-Tracking- und Loggingsysteme zu verbessern. Bereits jetzt loggen wir eine Menge Daten auf dem Server. Keine Angst, was eure Privaten Daten angeht! Uns geht es hier nur um statistische Daten über Spiel und Multiplayer-Sessions, Fehler und solchen Kram. Dazu müssen wir keinerlei persönliche Daten loggen! Einige dieser kryptischen Nachrichten und Zaubersprüche könnt ihr auch in eurem Lieblingsbrowser in der Web-Konsole sehen - zwischendurch hatten einige Catan Universe-Versionen noch weitreichendere Loggingfunktionen, damit unsere QA-Abteilung in der Lage ist, die “Matrix” zu lesen hinter eurer Catan Session. :)

    alt

    Ok, aber was tun wir mit all diesen Daten? Im Moment konzentrieren wir uns auf die Fehlerberichte von euch und unseren Testern, suchen die Session über die jeweilige Challenge-ID (die interne Identifikationsnummer eines bestimmten Spiels, das ihr gespielt habt) und versuchen das Problem nachzuvollziehen.

    Zum Beispiel bekamen wir einige Berichte von Spielern, die ein AutoMatch starteten und nach einiger Zeit feststellten, dass sie nicht die gleiche Karte sahen wie die anderen Spieler. Sie konnten immer noch spielen, aber jeder Spiel-Client zeigte ein anderes Spielfeld, bis zu dem Punkt, an dem das Spiel nicht mehr spielbar war... das heißt, bis zu dem Punkt, an dem ein Client falsche Daten an die anderen sendet, oder Daten für eine Spielaktion erwartet, die so nicht vorhanden sind - nur auf einem der anderen Clients.

    Mithilfe unseres Logging-Systems konnten wir das Problem relativ schnell eingrenzen: die Server-Protokolle der jeweiligen Sessions zeigten, dass den Clients bei Spielstart wirklich drei oder vier verschiedene Spielzustände (die sogenannten GameStates) ausgegeliefert wurden. Den Fehler konnten wir relativ schnell finden - ein Event-Listener wurde in bestimmten Sitationen nicht wieder abgemeldet... mooooment, wovon redet er da?

    alt

    Ein “Event-Listener” ist ein Stück Code, das auf ein bestimmtes Ereignis wartet (zum Beispiel "erstelle den GameState und sende ihn an diese drei Spieler... halt, vier ... es sind vier!"). Wenn das Ereignis eintritt, bekommt der “horchende” Code eine Mitteilung und wird ausgeführt. Um auf so ein Ereignis zu lauschen, muss dieser Listener dem Ereignis zugeordnet werden, sprich: er wird ge-”added”. Und selbstverständlich sollte man diesen Listener wieder abmelden, wenn das Ereignis eingetreten ist. Erstens, weil immer die selbe Platte zu hören langweilig ist. Und zweitens kann es sonst zu schwerwiegenden Fehlern kommen.

    Denn was passiert, wenn man einen Listener zu einem Ereignis hinzufügt, und dann nochmal, und nochmal? Und vielleicht sogar ein viertes Mal? - Ja, man ahnt es schon… man hört ein vierfaches Echo und versteht überhaupt nichts mehr. Außerdem wird das gute Stück Code öfter ausgeführt, als man erwarten würde ... ê voila: hier haben wir unsere vier Freunde, die zusammen das Spiel spielen - aber nicht das gleiche Spiel.

    Einfache Lösung: Wir melden den Event-Listener in allen Fällen ab, und schon haben wir wieder saubere Multiplayer-Sessions.

    alt

    Ok, Bug fixed... oder? Um absolut sicher sein, habe ich ein paar Zeilen Code hinzugefügt, die uns im Backend eine Warnung in unsere Fehlerprotokolle schreiben, wenn das Ereignis "Erstelle den GameState" mehr als einmal pro Sitzung auftritt. Nur um sicher zu gehen. Klingt paranoid? Ein bisschen... aber vielleicht, irgendwann in nicht allzu ferner Zukunft... implementiert ein nicht ganz so guter Programmierer wie ich diese super-coole neue Funktion... und dadurch funktioniert ein anderes Modul nicht mehr korrekt... und führt so den alten Fehler von damals wieder neu ein? Man kennt die Geschichte. :)

    Ok, das war’s von The Denz! und der dunklen Seite der Software-Entwicklung.
    Viel Spaß mit CU!

    P.S.: Mehr verrückte Bugfix-Abenteuergeschichten gibt es im Changelog für die nächste Version 1.0.25!


Log in to reply