|
|
Zeile 1: |
Zeile 1: |
− | ==Generelle Einführung==
| + | #REDIRECT [[HWR-Chat: Client / Server]] |
− | Um eine sinnvolle und konsequente Clientverwaltung zu ermöglichen muss ein Server implementiert werden.
| + | |
− | Dieser Server kann zum einem die Client-Verbindungen verwalten, aber auch den gesamten Nachrichtenverkehr leiten.
| + | |
− | Es soll nur am Server die Möglichkeit geben Benutzer zu registrieren, da eine Benutzung von HWR-Fremden Personen ausgeschlossen werden soll.
| + | |
− | | + | |
− | ==Verbindungen zu anderen Modulen==
| + | |
− | | + | |
− | Um den Server betriebsbereit zu halten muss es eine Verbindung zu der Datenerhaltung geben. Diese umfasst zum einen das DatabaseDAO, in dem die Gesamte Datenbank verwaltet wird und das ServerDataDAO, das im Prinzip eine lokale, zur Laufzeit benutzbare, Datenstruktur bereitstellt, die vorher aus der Datenbank geladen wurde. Siehe auch [[HWR-Chat:_Server_Data_Access_Object_/_Konzept_der_Datenerhaltung]]
| + | |
− | | + | |
− | Da auch am Server verschiedene Einstellungen zu tätigen sind, soll auch die Konfigurationsklasse aus dem COntroller Package benutzt werden.
| + | |
− | | + | |
− | Zu dem gibt es eine TerminalKonsole die auf dem GUI-Framework SWT basiert, diese ist aus einem vorherigen Projekt übernommen und angepasst worden.
| + | |
− | | + | |
− | ==Client-Handling==
| + | |
− | | + | |
− | | + | |
− | Der Server muss verschiedene Client-Anfragen managen und verwalten. Derr gesamte Prozess läuft folgendermaßen ab:
| + | |
− | Es wird auf Verbindungen gewartet, und zwar auf einem bestimmten Port, dem der Client bekannt sein muss. Die Routine (In diesem Thread) bleibt solange wartend/pausierend bis eine Verbindung registriert wurde.
| + | |
− | Wenn erfolgreich zum Server verbunden wurde, wird ein neuer Client-Thread eröffnet. Dieser Client Thread kann nun Java-Objekte auf dieser Verbindung empfangen (Auswertungslogik).
| + | |
− | Wird ein Anmeldung erfolgreich durchgeführt(Benutzername/Passwort richtig, nicht eingeloggt), wird dieser Client in eine Liste von Online Benutzern eingereiht. Soll nun ein ganz bestimmter Client angesprochen werrden (z.B. eine Textmessage soll an diesen Client versand werden) kann diese Liste dazu benutzt werden das NachrichtenObjekt an diesen Clienten zu leiten. Die Liste weiß zu jeder Zeit welcher Client über welche Verbindung verbunden ist.
| + | |
− | | + | |
− | ==Auswertungslogik==
| + | |
− | | + | |
− | Der Server empfängt generell nur AMessage Objekte. In einer Routine werden ankommende Objekte auf ihre echte Instanz hin überprüft (in Java mit instanceof). Je nach ObjektTyp werden nun andere Aktionen ausgeführt. Es werden entweder nur interne Daten geändert, Nachrichten weitergeleitet, oder auch beides.
| + | |
− | | + | |
− | ==Was passiert bei welchen Nachrichten?==
| + | |
− | Der Server empfängt eine Nachricht und diese ist vom Typ:
| + | |
− | *Textmessage: Die Nachricht wird einfach an den Empfänger weitergeleitet, ist dieser nicht online wird die Nachricht in eine Offline-Message Verwaltung eingereiht. Eine Textmessage kann auch an eine Gruppe gerichtet sein, die entsprechenden User werden vorher rausgesucht.
| + | |
− | *LoginRequest: Die Parameter aus der Nachricht werden abgegelichen mit den aktuellen User-Daten, sollte das Password nicht stimmen, der Nutzername falsch sein, oder die Person bereits online sein, wird die LoginRequestMessage mit einer Fehlermeldung bestückt und wieder zurück geschickt. Ist alles korrekt wird der Benutzer am Server registriert, und dem ClientHandling-System hinzugefügt (Welcher Benutzer ist Online, Welcher Benutzer ist auf welcher Verbindung verbunden. Dannach wird die LoginRequestMessage zurückgesand mit dem aktuellen User-Objekt als Attribut. Sollten offline Messages anstehen, werden diese nacheinander verschickt. Als letzten Schritt werden alle Freunde des neu angemeldeten Clients über eine Nachricht darüber verständigt, dass der Benutzer nun Online ist.
| + | |
− | *RequestMessages (DateiVersandRequest, Freundschaftsrequest): Bei bestimmten Anfragen wird auch eine Rückantwort bzw. Bestätigung benötigt. Über Attribute (die der Client setzt) werden diese Zustände erkannt und bearbeitet. Bei einer Freundschaftsanfrage werden bei einem angenommenen Zustand die Benutzerbeziehungen in die Datenbank eingetragen, bei der Dateiversandsanfrage werden die benötigten Verbinungsdaten eingetragen(Ip-Adresse)
| + | |
− | | + | |
− | ...Es gibt noch mehr Messages, die nach ähnlichen Prinzipien ausgewertet werden. Die obere Übersicht soll nur das Prinzip verdeutlichen.
| + | |