Giter VIP home page Giter VIP logo

rust-project's Introduction

Hey there 👋🏻

rust-project's People

Contributors

elena-liebl avatar fabfre avatar franziska-l avatar marcel-baur avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

rust-project's Issues

Netzwerk austreten Funktion

Wenn jemand das Netzwerk verlassen, will müssen ein paar Dinge passieren:

  • funktion zum verlassen des netzwerks (beispielsweise exit)
  • alle streams müssen beendet werden
  • was passiert wenn derjenige gerade streamt? ==> Wird der Stream abgebrochen/streams übergeben?
  • andere Peers benachrichtigen
  • network tables aktualisieren
  • Musik in Database auf andere Peers verteilen

Netzwerk erstellen

  • Key-Value DB als Map erstellen
  • Netzwerktabelle erstellen (dafür muss auch die eigene IP-Adresse des Peers herausgefunden werden)
  • Anfragen zum einklinken ins Netzwerk entgegen nehmen (Ports öffnen)

Load Management

Jeder Peer weiß wo die Kopie von jedem File liegt das er selber speichert. Falls dann ein Peer rausfliegt kann mit diesem Log die Redundanz einfach wiederhergestellt werden.

Portvalidierung

  • Port richtig formatiert
  • Port im Netzwerk noch nicht vergeben

Peer to Peer Netzwerk aufbauen

Jeder Client ist selber ein Peer im Netzwerk.

Aufbau

Jeder Peer benötigt eine Tabelle mit den anderen Peers als Inhalt (Netzwerktabelle).
Map<own-name, network-ip>

Zwei Optionen:

  • Neues Netzwerk erstellen create(own-name)
  • An ein existierendes Netzwerk anschließen join(own-name, network-ip)

Neues Netzwerk

Erstellt ein neues Netzerk. Muss dann auch fähig sein neue Peers zu akzeptieren. Erstellt damit die initiale Tabelle von Peers, wo er nur selber drin steht.

Sich einem Netzwerk anschließen

Schließt sich einem Netzwerk an, entsprechend der übergebenen network-id.
Wenn das passiert muss der neue Peer von einem bereits bestehenden Peer die Netzwerktabelle erhalten. Diese muss auch mit den Informationen des neuen Peers aktualisiert werden. Dabei muss sichergestellt werden dass der Name des neuen Netzwerks own-name noch nicht existiert. Andere Peers müssen vom neuen Peer mitbekommen und ihre Netzwerktabellen auch aktualisieren

Architektur Library

  • Schnittstelle klar definieren und vom Rest abkapseln

  • unwrap() entfernen

Das mit den Schnittstellen machen wir am einfachsten wenn wir schon mit dem Projekt fertig sind und wissen welche Funktionen wir brauchen. Nur die sind dann nach außen hin zugänglich.

Responses

Hab einen generischen Typ für Responses erstellt, ist aber noch auf meinem Branch

Projektplan

Key Value:

  • Key: Name (manuell eingeben): Songname - Künstler
  • Value: mp3 file (speichern als Binärdatei)

Rückgabe als (Websocket?) Stream.

Wie verteilen wir die DB? Peer2Peer, Redundancy beachten: Jedes File sollte auf mindestens 2 Peers sein.

Basis-Funktionen:
get(Filename) -> Gibt das mp3 file zurück
stream(filename) -> Streamt das mp3
push(filename, file)

Speichern von Daten in der HashMap

Problem:

Unser Programm läuft mit mehreren Threads. Von einer der Threads (Interaction) werden Einträge in unsere Datenbank (die ja eine HashMap ist) geschrieben. Das Problem ist dass Referenzen nicht ohne weiteres in Threads übergeben werden dürfen. Hat auch gute Gründe, unter anderem dass ja mehrere Threads "gleichzeitig" etwas an der HashMap ändern könnten, was zu unvorhersehbaren Fehlern führen kann (zweimal der gleiche key z.B.).

Ich hab mich etwas auf StackExchange umgesehen um zu schauen wie man das lösen kann. Mit etwas hacken kann man das evtl. umgehen, kann aber sehr gut sein dass das in der Bewertung schlecht ankommt.

Lösungsansatz (eine Lösung hab ich noch nicht):

Do not communicate by sharing memory; instead, share memory by communicating. Wir ändern nicht direkt die HashMap, sondern senden einen Request nach außen um die Datenbank aktuell zu halten. Dieser kann auch zurückgewiesen werden falls etwas nicht passt, doppelte keys zum Beispiel. Letztendlich müssen wir das sowieso mit den Tabellen der anderen Peers abgleichen.

Notification System

Eventuell ein Notification System für Kommunikation innerhalb der Threads? Wenn das natürlich so easy ist 😅
Müsste auf jeden Fall im ConThread bzw Mainthread gestartet werden.

Heart beat

  • Regelmäßige Anfragen an alle Peers um zu sehen ob die Verbindung noch existiert. Falls nicht muss der Peer entfernt werden.
  • Bei regulären Anfragen im Fall einer toten Verbindung den Peer entfernen

Bugs:
Heartbeat/DroppedPeer nicht an sich selber senden

Stop music wenn file gelöscht?

Im moment löuft die Musik weiter, wenn sie aus der Datenbank gelöscht wurde. Die Musik sollte am besten gestoppt werden wenn man die löscht.

Join Network

Sich einem Netzwerk anschließen
Schließt sich einem Netzwerk an, entsprechend der übergebenen network-id.
Wenn das passiert muss der neue Peer von einem bereits bestehenden Peer die Netzwerktabelle erhalten. Diese muss auch mit den Informationen des neuen Peers aktualisiert werden. Dabei muss sichergestellt werden dass der Name des neuen Netzwerks own-name noch nicht existiert. Andere Peers müssen vom neuen Peer mitbekommen und ihre Netzwerktabellen auch aktualisieren

  • network table vom bestehenden netzwerk anfordern
  • eventuell nach neuem namen fragen / oder anderen namen erstellen
  • eigenen Peer erstellen (wir haben dann schon alle namen)
  • peer an andere peers im netzwerk schicken

Client

  • Musik abspielen
  • Musik streamen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.