Klassendesign für P2P-Programm



  • Hallo,

    ich würde gerne ein P2P-Programm programmieren. Ich habe mir schon einige Gedanken über den Klassenaufbau für das Programm gemacht, aber ich stoße dabei immer wieder auf Probleme, die man sicher reduzieren oder evtl. sogar ganz verhindern kann. Zunächst bräuchte ich eine Klasse für den Server und für den Client, da das Progrmam sowohl Verbindungen annehmen als auch neue Vebrindung aufbauen können muss. Jede empfangene Nachricht muss dann verarbeitet werden. Hier wäre ich schon bei meinem ersten Problem angelangt: Soll ich noch eine Klasse für die Verarbeitung der Nachrichten schreiben? Außerdem brauche ich eine Art Liste, wo die letzten empfangenen Nachrichten gespeichert werden, um damit einen Mechanismus zu implementieren, das bereits empfangene Nachrichten nicht nochmal weitergeleitet werden und das Netzwerk unnötig belasten. Damit alles parallel abläuft bräuchte ich Threads. Ich wäre bis hierhin bereits bei 3 Threads. Zwei Nachrichten-Threads, je einer für Client und Server und ein Thread für den Verbindungsaufbau.

    Ich müsste auch die empfangenen Adressen irgendwo speichern, damit der Client weiß wohin er sich verbinden soll und selber bei einem Ausfall einiger Verbindungen noch einige Möglichkeiten hat sich neu zu verbinden.

    Soweit wäre ich mit meinem Design bisher, aber ich bin damit stark unzufrieden, da es alles andere als gut wartbar ist, da extrem viele Abhängigkeiten entstehen und ich die Zugriffe darauf verdammt gut synchronisieren muss...

    Client
    - Liste mit den Adressen
    - Thread für Verbindungsaufbau
    - Thread für Nachrichtenschleife

    Server
    - Thread für Nachrichtenschleife

    MessageParser
    - Liste mit letzten emfangenen Nachrichten
    - Member zu Client und Server (damit broadcast Funktion aufgerufen werden kann)
    - Funktion für das Parsen

    Hat jemand ein paar Ideen, wie ich es mir einfacher machen kann? Mein Ansatz würde vermutlich funktionieren, aber der Aufwand ist natürlich enorm...

    Viele Grüße
    Mr. P


Anmelden zum Antworten