# PU 1: "Praktikum Service-Discovery" Dieses Projekt wurde von der **Gruppe D** entwickelt: **Antoniadis Dimitrios, Dexheimer Fynn, Corina Schmitt** Dieses Projekt implementiert einen Syslog-Server auf Basis von UDP gemäß dem RFC 5424 Standard. Es beinhaltet eine automatische Service-Discovery via Broadcast. > **Hinweis:** Um den Server zu testen, wird ein entsprechender Client benötigt. Das System setzt die installierten Technologien **Java** und **Maven** voraus. Die Nutzung von **Just** ist optional und dient lediglich der vereinfachten Ausführung der Befehle. ## Projektstruktur & Klassen * **`pom.xml`**: Maven-Konfigurationsdatei für Abhängigkeiten und Build-Prozess. * **`justfile`**: Automatisierungsskript für einfache Ausführung (`just server`). * **`vs.SyslogServer`**: Der Hauptdienst. Er startet zwei parallele Threads: * **Syslog-Service**: Empfängt Log-Nachrichten auf Port 514, validiert die Länge und trennt Metadaten optisch vom Nachrichteninhalt. * **Discovery-Service**: Antwortet auf Broadcast-Anfragen auf Port 8888, um Clients die Server-IP mitzuteilen. * **`vs.SyslogMessage`**: Kernklasse zur Erzeugung/Repräsentation standardkonformer Nachrichten (inkl. Header, Zeitstempel und Structured Data). * **`vs.AsciiChars` / `vs.StructuredData`**: Hilfsklassen zur Einhaltung der RFC-Spezifikationen. ## Funktionsablauf (Service Discovery & Logging) 1. **Broadcast**: Ein Client sendet ein UDP-Paket an die Broadcast-Adresse `255.255.255.255:8888`. 2. **Antwort**: Der Server empfängt den Suchruf und sendet ein Bestätigungs-Paket an den Client zurück. 3. **Identifikation**: Der Client extrahiert die IP-Adresse des Servers aus dem Antwort-Paket. 4. **Logging**: Der Client formatiert die Nachricht nach RFC 5424 und sendet sie direkt an den Server (Port 514). 5. **Verarbeitung**: Der Server empfängt das Datenpaket, validiert die Länge, entfernt das Byte Order Mark (BOM) und trennt die RFC-Metadaten optisch vom eigentlichen Nachrichteninhalt für eine strukturierte Konsolenausgabe. ## Ausführung Stellen Sie sicher, dass **Java** und **Maven** auf Ihrem System installiert sind. Die Installation von **Just** wird empfohlen, ist jedoch optional. ### 1. Konfiguration für Linux/macOS Da das `justfile` standardmäßig für die PowerShell optimiert ist, passen Sie bei der Nutzung von Unix-basierten Systemen bitte die erste Zeile im `justfile` an: * Ändern Sie `set shell := ["powershell.exe", "-c"]` zu `set shell := ["sh", "-c"]`. ### 2. Wichtige Befehle Nutzen Sie `just`, um die folgenden Aufgaben automatisiert auszuführen: * **Kompilieren**: `just compile` * **Server starten**: `just server` * **Projekt aufräumen**: `just clean` **Hinweise:** * Weitere Befehle (z. B. für Tests oder Javadoc) finden Sie direkt im `justfile`. * Falls Sie **Just** nicht verwenden möchten, können die entsprechenden Maven-Befehle (z. B. `mvn compile` oder `mvn exec:java...`) direkt genutzt werden.