ClientApp:
In der ClientApp können die Host-Adresse sowie der Host-Port für den späteren Server festgelegt werden.
Die Klasse organisiert den Start sowie den Stop des Programms und reagiert auf Login sowie Registration Responses/Messages.
ClientConnection:
Die ClientConnection stellt eine Verbindung zum Server her.
Hierbei wird ebenfalls ein ConnectionListener verwendet, der die Verbindung zum Server überprüft.
Die Klasse behandelt ebenfalls ein- und ausgehende Messages (Responses, Exceptions, ...).
ClientHandler:
Der ClientHandler Organisert die verschiedenen eingehenden Connections.
SceneManager:
Der SceneManager organisiert das Programm Fenster sowie die verschiedenen Scenes.
Hier werden die verschiedenen Views initialisiert und als Scene-Objekt abgelegt.
Wird nun ein bestimmtes View Event auf den Bus gepostet, kann im SceneManager die jeweilige Scene durch die neue gewünschte Scene ausgetauscht werden.
Presenter:
AbstractPresenter:
Der AbstractPresenter ist die Oberklasse der verschiedenen unten genannten Presenter.
Dies ermöglicht das Erstellen von neuen Presentern.
Der AbstractPresenter bekommt den UserService injiziert und den EventBus gesetzt, sodass alle Unterklassen (Presenter) diese beiden Objekte erben und nutzen können.
Login Presenter:
Der LoginPresenter verwaltet die LoginView.
Diese beinhaltet zwei Eingabefelder und zwei Button.
MainMenuPresenter:
Der MainMenuPresenter verwaltet die MainMenuView.
Diese beinhaltet zwei Button für die Lobby sowie eine Liste aller User, die derzeit eingeloggt sind.
Neben den UI Komponenten werden in diesem Presenter ebenfalls Responses und Messages Subscribed um auf das
Ein- und Ausloggen der Nutzer zu reagieren.
RegistrationPresenter:
Der RegistrationPresenter verwaltet die RegistrationView.
Diese beinhaltet drei Eingabefelder und zwei Button.
Bei der Nutzung des CancelButtons wird die Registrierung abgebrochen und das registrationCanceledEvent auf den Bus gepostet.
Bei der Nutzung des RegistrationButtons wird überprüft, ob die Eingabe leer ist oder die beiden Passwörter ungleich sind und somit eine Fehlermeldung auf dem Bus gepostet.
Ist dies nicht der Fall, so wird der userService mit der createUser Methode aufgerufen.
Services:
LobbyService:
Der LobbyService organisiert die verschiedenen Spiele-Lobbies.
Im Basisprojekt bietet es die Möglichkeit, eine Lobby zu erstellen oder einer Lobby beizutreten.
UserService:
Der UserService organisiert die verschiedenen User.
Im Basisprojekt bietet es die Möglichkeit, Requests an den Server zu schicken, um einen neuen User zu erstellen, ihn zu überarbeiten, ihn zu löschen oder ihn ein- sowie auszuloggen.
Interfaces:
ClientUserService:
Das ClientUserService Interface definiert alle Methoden für den UserService, sodass diese im UserService implementiert werden können.
ClientConnectionFactory:
Die ClientConnectionFactory wird verwendet, um die ClientConnection per giuce zu injizieren.
ConnectionListener:
Das ConnectionListener Interface definiert die Methoden connectionEstablished und exceptionOccured, um die Connection dauerhaft zu überprüfen.
SceneManagerFactory:
Die SceneManagerFactory wird verwendet, um den SceneManager per giuce zu injizieren.
Events:
ShowLoginViewEvent:
Das ShowLoginViewEvent wird auf den Bus gepostet, um die LoginView anzuzeigen.
RegistrationCanceledEvent:
Das RegistrationCanceledEvent wird auf den Bus gepostet, um die Registrierung abzubrechen und die vorherige View zu öffnen.
RegistrationErrorEvent:
Das RegistrationErrorEvent wird auf dem Bus gepostet, wenn es einen Fehler bei der Registrierung gibt.
Hierbei wird die Fehlermessage beim Erstellen des Events übergeben.
ShowRegistrationViewEvent:
Das ShowRegistrationViewEvent wird auf den Bus gepostet, um die RegistrationView anzuzeigen.
Exception:
ExceptionMessage:
Die ExceptionMessage ist eine Message extra für die Exceptions.
Hierbei wird die Fehlermeldung als String übergeben.
SecurityException:
Die SecurityException wird geworfen, wenn eine Autorisierung benötigt wird.
RegistrationExceptionMessage:
Die RegistrationExceptionMessage wird geworfen, wenn ein Fehler bei der Registrierung aufgetreten ist.
DTO:
LobbyDTO:
Die LobbyDTO transferiert Daten über die Lobby zwischen den Clients und dem Server.
Dies beinhaltet den Namen, den Ersteller und ein TreeSet (Menge) aller Mitglieder der Lobby.
UserDTO:
Die UserDTO transferiert Daten über den User zwischen den Clients und dem Server.
Dies beinhaltet den Nutzernamen, das Passwort sowie die E-Mail Adresse des Nutzers.
Hierbei existiert bereits eine Methode, die das UserDTO ohne Passwort "getWithoutPassword" zurückgibt.
Messages:
AbstractMessage:
Die AbstractMessage ist die Oberklasse aller Messages und beinhaltet den Kontext sowie die Session.
AbstractRequestMessage:
Die AbstractRequestMessage ist die Oberklasse aller RequestMessages.
AbstractResponseMessage:
Die AbstractResponseMessage ist die Oberklasse aller RequestMessages.
AbstractServerMessage:
Die AbstractServerMessage ist die Oberklasse aller ServerMessages und beinhaltet eine Liste aller Sessions.
AbstractLobbyMessage:
Die AbstractLobbyMessage ist die Oberklasse aller LobbyMessages und beinhaltet den Namen der Lobby sowie die UserDTO des Lobbyerstellers.
LobbyCreatedMessage:
Die LobbyCreatedMessage wird verwendet, um allen Clients den Namen sowie das UserDTO des Erstellers der neuen Lobby zukommen zu lassen.
Dies ermöglicht das Updaten einer LobbyListe.
UserJoinedLobbyMessage:
Die UserJoinedLobbyMessage wird verwendet, um allen Clients in der Lobby mitzuteilen, dass ein neuer Nutzer der Lobby beigetreten ist.
Hierzu wird der Lobby Name sowie das UserDTO des Nutzers übergeben.
UserLeftLobbyMessage:
Die UserLeftLobbyMessage wird verwendet, um allen Clients in der Lobby mitzuteilen, dass ein neuer Nutzer die Lobby verlassen hat.
Hierzu wird der Lobby Name sowie das UserDTO des Nutzers übergeben.
UserLoggedInMessage:
Die UserLoggedInMessage wird verwendet, um allen Clients den Nutzernamen des eingeloggten Nutzers zukommen zu lassen.
Dies ermöglicht das Updaten der UserListe.
UserLoggedOutMessage:
Die UserLoggedInMessage wird verwendet, um allen Clients den Nutzernamen des ausgeloggten Nutzers zukommen zu lassen.
Dies ermöglicht das Updaten der UserListe.
UsersListMessage:
Die UsersListMessage wird verwendet, um einem Client eine Liste aller eingeloggten Nutzer zukommen zu lassen.
Requests:
AbstractLobbyRequest:
Die AbstractLobbyRequest ist die Oberklasse aller LobbyRequests und beinhaltet den Namen der Lobby sowie die UserDTO des Lobbyerstellers.
CreateLobbyRequest:
Die CreateLobbyRequest wird verwendet, wenn ein Nutzer eine neue Lobby erstellen möchte.
Diese übergibt den gewünschten Lobbynamen und das UserDTO des Nutzers.
LobbyJoinUserRequest:
Die LobbyJoinUserRequest wird verwendet, wenn ein Nutzer einer Lobby beitreten möchte.
Hierzu wird der Lobby Name sowie das UserDTO des Nutzers übergeben.
LobbyLeaveUserRequest:
Die LobbyLeaveUserRequest wird verwendet, wenn ein Nutzer eine Lobby verlassen möchte.
Hierzu wird der Lobby Name sowie das UserDTO des Nutzers übergeben.
LoginRequest:
Die LoginRequest wird verwendet, wenn ein Client sich einloggen möchte.
Hierzu wird der eingegebene Nutzername sowie das Passwort übergeben.
LogoutRequest:
Die LogoutRequest wird verwendet, um einen Clienten auszuloggen.
RegisterUserRequest:
Die RegisterUserRequest wird verwendet, um einen neuen Nutzer zu registrieren.
Hierzu wird ein User Objekt des neuen Nutzers übergeben.
RetrieveAllOnlineUsersRequest:
Die RetrieveAllOnlineUsersRequest wird verwendet, um die UserList des Clients zu initialisieren, indem sie eine Liste aller eingeloggten Nutzer anfragt.
UpdateUserRequest:
Die UpdateUserRequest wird verwendet, um einen bereits erstellen Nutzer zu bearbeiten.
Hierzu wird ein neues User Objekt übergeben.
Response:
AllOnlineUsersResponse:
Die AllOnlineUsersResponse wird verwendet, um einem Clienten auf die RetrieveAllOnlineUsersRequest eine Liste aller eingeloggten User zukommen zu lassen.
LoginSuccessfulResponse:
Die LoginSuccessfulResponse wird verwendet, um einem Client auf die LoginRequest mitzuteilen, dass dieser sich erfolgreich angemeldet hat.
RegistrationSuccessfulResponse:
Die RegistrationSuccessfulResponse wird verwendet, um einem Client auf die RegisterUserRequest mitzuteilen, dass dieser sich erfolgreich registriert hat.
Configuration:
Die Configuration-Klasse beinhaltet den Default Port des Servers.
MyObjectDecoder & MyObjectEncoder:
Diese Klassen dienen zum Decodieren sowie Encodieren von Objekten.
NettyMessageContext:
Diese Klasse dient zum Einkapseln des Netty Handler Kontextes.
NettyServerHandler:
Diese Klasse wird verwendet, wenn es bei dem Netty Handler zu neuen Connections oder neuen Daten kommt.
Server:
Diese Klasse repräsentiert den Server und startet diesen auf dem angegebenen Port.
ServerHandler:
Der ServerHandler organisiert die Kommunikation zwischen den Clients und dem Server.
UUIDSession:
Diese Klasse speichert den User sowie seine jeweilige SessionID ab.
LobbyManagement:
Das LobbyManagement dient zum Erstellen und Löschen der Lobbies.
Hierfür wird eine HashMap verwendet, die den Lobbynamen mit dem jeweiligen LobbyDTO abspeichert.
Messages:
AbstractServerInternalMessage:
Die AbstractServerInternalMessage ist die Oberklasse aller internen ServerMessages.
ClientAuthorizedMessage:
Die ClientAuthorizedMessage wird verwendet, um allen Services mitzuteilen, dass ein Nutzer sich erfolgreich angemeldet hat.
Hierzu wird das User Objekt des Nutzers übergeben.
ClientDisconnectedMessage:
Die ClientDisconnectedMessage wird verwendet, um allen Clients mitzuteilen, dass ein Nutzer sich ausgeloggt hat.
Exception:
ServerExceptionMessage:
Die ServerExceptionMessage wenn ein Fehler im Server aufgetreten ist.
Diese übergibt die Fehlermeldung.
UserManagementException:
Die UserManagementException wird geworfen, wenn ein Nutzer mit dem gewünschten Namen bereits existiert oder versucht wird, einen bisher noch nicht erstellten Nutzer
zu bearbeiten oder zu löschen.
Usermanagement:
AbstractUserStore:
Der AbstractUserStore ist die Oberklasse aller UserStores.
MainMemoryBasedUserStore:
Der MainMemoryBasedUserStore speichert alle registrierten Nutzer ab.
Wichtig! Zu Beginn des Softwareprojekts existiert nur eine vorgefertigte Anzahl an Nutzern.
Wird der Server geschlossen, so fallen alle neu Registrierten Nutzer weg.
AbstractUserManagement:
Das AbstractUserManagement ist die Oberklasse aller UserManagements.
UserManagement:
Das UserManagement behandelt alle Nutzer bezogenen Methoden.
Hierzu gehört das Ein- sowie Ausloggen, wie auch das Erstellen, Updaten und Löschen eines Nutzers.
Services:
AbstractService:
Der AbstractService ist die Oberklasse aller Services.
LobbyService:
Der LobbyService dient zum Reagieren auf LobbyRequests.
UserService:
Der UserService wird verwendet, um Requests bezüglich der Nutzer auf dem Bus abzufangen und dementsprechend die dazugehörigen Methoden des UserManagements aufzurufen.
ServerApp:
Die ServerApp wird verwendet, um den Server zu starten.