Protocole #6

Open
opened 2024-10-28 15:39:56 +01:00 by study-faraphel · 1 comment

Comment faire communiquer les machines ensemble ?

Les différentes machines du réseau, une fois les étapes de #4 implémentés, peuvent maintenant se voir ensemble dans un réseau.
A présent, nous souhaitons définir comment ces appareils vont communiquer.

Des packets seront transmis entre les appareils. Ces packets contiendrions un numéro de "channel", permettant de facilement identifier quels packets nous sont destiné ou non, un mode d'encryption définissant l'encryption du reste du packet, pouvant être déchiffré à l'aide de clé ayant été échangé dans de précédente communication, et un type d'évènements définissant l'objectif du reste du packet (recherche d'autre appareil, envoie d'un packet audio, etc...).
Dans le reste du packet chiffré, on peut retrouver des données additionnels.

Etablissement des rôles

Une machine seule est présente dans le réseau. Après n'avoir trouvé aucun autre appareils dans ce réseau, elle va s'auto déclaré comme étant un serveur

flowchart
    Machine1["Undefined"]

flowchart
    Machine1["Server"]

Si toutes les machines n'ont pas défini de serveur, alors une élection doit avoir lieu entre les machines capables d'émettre sur le réseau (utiliser le ping total sur toutes les autres machines ?)

flowchart
    Machine1["Undefined"]
    Machine2["Undefined (Internet)"]
    Machine3["Undefined (Internet)"]
    
    Machine1 -.- Machine2
    Machine2 -.- Machine3
    Machine3 -.- Machine1

flowchart
    Machine1["Client"]
    Machine2["Client (Internet)"]
    Machine3["Server (Internet)"]
    
    Machine1 --- Machine3
    Machine2 --- Machine3

Une nouvelle machine est intégré à un réseau existant. Un serveur y est déjà présent, elle s'y connecte donc comme un client.

flowchart
    Machine1["Undefined"]
    Machine2["Server"]
    Machine3["Client"]
    Machine4["Client"]
    
    Machine3 --- Machine2
    Machine4 --- Machine2

flowchart
    Machine1["Client"]
    Machine2["Server"]
    Machine3["Client"]
    Machine4["Client"]
    
    Machine1 --- Machine2
    Machine3 --- Machine2
    Machine4 --- Machine2

Le serveur ne répond plus au client. Le client passe alors de nouveau en mode indéfini.

flowchart
    Machine1["Client"]
    Machine2["Server"]
    
    style Machine2 fill:#A00
    
    Machine1 --- Machine2

flowchart
    Machine1["Undefined"]
# Comment faire communiquer les machines ensemble ? Les différentes machines du réseau, une fois les étapes de #4 implémentés, peuvent maintenant se voir ensemble dans un réseau. A présent, nous souhaitons définir comment ces appareils vont communiquer. Des packets seront transmis entre les appareils. Ces packets contiendrions un numéro de "channel", permettant de facilement identifier quels packets nous sont destiné ou non, un mode d'encryption définissant l'encryption du reste du packet, pouvant être déchiffré à l'aide de clé ayant été échangé dans de précédente communication, et un type d'évènements définissant l'objectif du reste du packet (recherche d'autre appareil, envoie d'un packet audio, etc...). Dans le reste du packet chiffré, on peut retrouver des données additionnels. ## Etablissement des rôles Une machine seule est présente dans le réseau. Après n'avoir trouvé aucun autre appareils dans ce réseau, elle va s'auto déclaré comme étant un serveur ```mermaid flowchart Machine1["Undefined"] ``` --- ```mermaid flowchart Machine1["Server"] ``` --- Si toutes les machines n'ont pas défini de serveur, alors une élection doit avoir lieu entre les machines capables d'émettre sur le réseau (utiliser le ping total sur toutes les autres machines ?) ```mermaid flowchart Machine1["Undefined"] Machine2["Undefined (Internet)"] Machine3["Undefined (Internet)"] Machine1 -.- Machine2 Machine2 -.- Machine3 Machine3 -.- Machine1 ``` --- ```mermaid flowchart Machine1["Client"] Machine2["Client (Internet)"] Machine3["Server (Internet)"] Machine1 --- Machine3 Machine2 --- Machine3 ``` --- Une nouvelle machine est intégré à un réseau existant. Un serveur y est déjà présent, elle s'y connecte donc comme un client. ```mermaid flowchart Machine1["Undefined"] Machine2["Server"] Machine3["Client"] Machine4["Client"] Machine3 --- Machine2 Machine4 --- Machine2 ``` --- ```mermaid flowchart Machine1["Client"] Machine2["Server"] Machine3["Client"] Machine4["Client"] Machine1 --- Machine2 Machine3 --- Machine2 Machine4 --- Machine2 ``` --- Le serveur ne répond plus au client. Le client passe alors de nouveau en mode indéfini. ```mermaid flowchart Machine1["Client"] Machine2["Server"] style Machine2 fill:#A00 Machine1 --- Machine2 ``` --- ```mermaid flowchart Machine1["Undefined"] ```
study-faraphel added this to the M2-PT-DRP project 2024-10-28 15:39:56 +01:00
Author
Owner

Voici un simple snippet d'exemple pouvant montrer le fonctionnement de la main loop du thread émetteur :

while (true) {
    switch (this->status) {
        case Status::UNDEFINED:
            // send a search packet
            // if a server have been found, use it immediately.
            // if there are no machine after 5 seconds, become a server (if capabilities).
            // if there are others unknown machine, take part of an election for the server.

        case Status::CLIENT:
            // often check for the server still being available.
            // if the server is not responding after 10 seconds, become UNDEFINED.
        
        case Status::SERVER:
            // check for others server and only keep one ?
    }

    std::this_thread::sleep_for(1s);
}
Voici un simple snippet d'exemple pouvant montrer le fonctionnement de la main loop du thread émetteur : ```cpp while (true) { switch (this->status) { case Status::UNDEFINED: // send a search packet // if a server have been found, use it immediately. // if there are no machine after 5 seconds, become a server (if capabilities). // if there are others unknown machine, take part of an election for the server. case Status::CLIENT: // often check for the server still being available. // if the server is not responding after 10 seconds, become UNDEFINED. case Status::SERVER: // check for others server and only keep one ? } std::this_thread::sleep_for(1s); } ```
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: study-faraphel/M2-PT-DRP#6
No description provided.