You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Allgemeines

Das Basissystem gliedert sich in drei Module: Server, Client und Common. Client ist der Bestandteil, der das Userinterface enthält und auf den Systemen der Spieler läuft. Der Server ist der Bestandteil, der die Nutzer- und Spielverwaltung enthält. Common enthält zwischen Server und Client geteilte Klassen. Da es sich bei Client und Server um zwei Anwendungen handelt, und um Abhängigkeiten zu reduzieren, dürfen in Client und Server nur Abhängigkeiten zu Common und nicht zur anderen Anwendung bestehen. Alle geteilten Klassen müssen sich in Common befinden.

 Ereignisgetriebene Architektur

Die Kommunikation zwischen Client und Server wie auch die Interne Kommunikation erfolgt ereignisgetrieben. Dabei handelt es sich um eine Umsetzung des Observerpatterns. Verschiedene Bestandteile, die miteinander kommunizieren, enthalten einen Eventbus von Google Guava (https://github.com/google/guava/wiki/EventBusExplained), über den die Kommunikation läuft. Dabei muss es sich in allen Bestandteilen, die mit einander kommunizieren sollen, um das gleiche Eventbus-Objekt handeln. Bestandteile, die das Eventbus-Objekt enthalten, können mit der Methode eventbus.post(Object msg) eine Nachrichten-Object msg auf den Eventbus legen. Damit andere Bestandteile auf diese Nachricht reagieren können, müssen sie bei dem Eventbus als Listener registriert sein. Dies geschieht mit der Methode eventBus.register(Object listener) .  Die Reaktion auf eine Nachricht msg der Klasse Type erfolgt mit einer Methode mit einem Parameter der Klasse Type oder einer Oberklasse davon.  Der Name so einer Methode ist in der Regel onType(Type msg) - also on + Klassenname. Diese Methode muss mit der Annotation @Subscribe versehen sein.

Kommunikation zwischen Client und Server

Die Kommunikation zwischen Client und Server erfolgt über die Bibliothek Netty (https://netty.io/). Da die Nachrichten von beiden Modulen verwendet werden, müssen sie im Common liegen. Außerdem müssen dei Nachrichten und ihre Komponeten das Interface Serializable implementieren, sodass sie serialisiert und versendet werden können.


Common


Common enthält die Message-Klassen und -Interfaces, sowie Interfaces und DTO (Data Transfer Object) für Klassen die sowohl in Client als auch im Server verwendet werden.

Bei den Messages gibt es drei Arten: RequestMessages, ResponseMessages, ServerMessages. RequestMessages werden von einem Client zum Server geschickt. ResponseMessages sind die Antworten des Servers auf eine spezifische RequestMessage. ServerMessages werden vom Server an einen oder mehrere Clients geschickt. Sie sind nicht notwendigerweise eine Antwort auf eine Request.


Server


Client


  • No labels