Networkmodule

Andre Schemschat

Um nicht nur intern die Daten verarbeiten zu können, sondern auch externe An- und Abfragen, wird eine weitere Komponente benötigt. Um diesen Teil kümmert sich das Netzwerkmodul. Es ist wiederum modular um einen allgemeinen Teil angeordnet, um flexibel neue Kommandos implementieren zu können. An der Basis lauscht ein Socket auf neue Anfragen. Verbindet sich einer der Klienten mit dem Server, so wird ein neuer Thread aus einem Threadpool geholt um den Mehrbenutzerbetrieb zu ermöglichen. Innerhalb dieses Threads werden dann verschiedene, auf einander aufbauende Verarbeitungsschritte ausgeführt. Angefangen wird damit, die Anfrage zu lesen und anschließend das JSON-Format zu parsen. Die umgewandelten Informationen werden dann an sogenannte Annotations weitergereicht. Diese stellen eine Art Vorverarbeitungsschicht dar. Die Annotations können flexibel erweitert werden und werden in der Initialisierungsphase dynamisch in die Netzwerkschnittstelle eingeladen. Durch sie wird z.B. die mitgeschickte Session in ein gültiges Benutzerobjekt umgewandelt oder Informationen über das betrachtete Spiel eingefügt. Nachdem die Anfrage an alle Annotations durchgereicht wurde kommt die Hauptebene, die Actions. Diese werden ebenfalls, ähnlich zu der Vorstufe, dynamisch geladen. Der nebenstehende Codeausschnitt zeigt eine beispielhafte Implementierung einer Action. Sowohl Annotations als auch Actions können eine Liste von Abhängigkeiten angeben und das Netzwerkmodul garantiert, dass diese eingehalten werden. Ist dies nicht möglich, der entstandene Graph also nicht topologisch sortierbar, schlägt die Initialisierungsphase fehl.

{   "meta": {
        "type": "get_games",
        "id": "spectator"
    },
    "data": {}
};
 
{   "get_games": [
        {   "id":1,
            "players": {
                "cops":[],
                "thieves":["Spielleiter_1", "Android"]
            },
            "name":"Westerberg",
            "numberofplayers":2,
            "maximum_safes":5
        },
        {   "id":4,
            "players": {
                "cops": ["iPhone4", "Aton"],
                "thieves": ["daniel", "Spielleiter_4", "andre", "iPhone3GS"]
            },
            "name": "CeBIT-Stand",
            "numberofplayers": 6,
            "maximum_safes": 3
        },
        {
            "id": 3,
            "players": { 
                "cops": ["Sebastian"],
                "thieves": ["Spielleiter_3"]
            },
            "name": "CeBIT", 
            "numberofplayers": 3,
            "maximum_safes": 5
        }
    ]
}
Beispiel einer Anfrage und Antwort


Page last modified on March 21, 2011, at 02:37 PM