Skip to main content

toole_core/
lib.rs

1// modules internes de Toolé
2pub mod error;
3pub use error::ToolError;
4pub mod discovery;
5pub mod file_certif;
6pub mod firewall;
7pub mod receiver;
8pub mod sender;
9pub mod transfer;
10pub mod utils;
11use serde::Serialize;
12use std::sync::atomic::AtomicBool;
13use std::sync::Arc;
14
15// ici je defini la structure d'un pair sur le reseau
16// chaque pair a un id jolie et unique (hostname-suffixe) et une addresse IP
17#[derive(Debug, Clone, Serialize)]
18pub struct Peer {
19    pub id: String,
20    pub addr: String,
21}
22
23// trait UI pour communiquer avec l'interface utilisateur
24// chaque implementation (Tauri, Null, etc.) doit fournir ces methodes
25pub trait UI: Send + Sync {
26    // je log un message dans l'interface
27    fn log(&self, msg: &str);
28
29    // je signale qu'un nouveau pair est trouve
30    fn peer_found(&self, peer: &Peer);
31
32    // je signale qu'un pair a ete perdu
33    fn peer_lost(&self, hostname: &str);
34
35    // affichage initial de la barre de progression pour ce transfert
36    fn show_progress_bar(&self, transfer_id: &str);
37
38    // mise a jour de la progression (octets envoyes / total)
39    fn update_progress_bar(&self, transfer_id: &str, bytes_sent: u64, total_bytes: u64);
40
41    // progression d'un fichier individuel dans un lot (nom de fichier + octets)
42    fn file_progress_bar(
43        &self,
44        transfer_id: &str,
45        file_name: &str,
46        file_bytes_sent: u64,
47        file_total_bytes: u64,
48    );
49
50    // quand un transfert entrant demande la validation de l'utilisateur :
51    // le recepteur affiche la demande (accepter / refuser) avec les infos
52    // du lot (emetteur, taille totale, liste des fichiers)
53    fn transfert_incoming(
54        &self,
55        transfer_id: &str,
56        sender: &str,
57        total_bytes: u64,
58        files: Vec<String>,
59    );
60
61    // quand un transfert est refuse par le destinataire
62    fn transfert_refused(&self, transfer_id: &str);
63
64    // quand un transfert est annule par l'utilisateur
65    fn transfert_cancel(&self, transfer_id: &str);
66
67    // quand un transfert est termine avec succes
68    fn transfert_completed(&self, transfer_id: &str);
69
70    // quand des fichiers ont ete recus par ce device
71    fn transfert_received(&self, transfer_id: &str, peer: &str, bytes: u64, files: Vec<String>);
72
73    // quand une erreur survient pendant un transfert
74    fn transfert_error(&self, transfer_id: &str, error: &ToolError);
75}
76
77// registre des transferts actifs : le récepteur s'y enregistre dès qu'un lot
78// est identifié (transfer_id connu) pour que l'app puisse annuler la réception
79// en cours depuis l'interface. Le stop est le drapeau d'arrêt de la connexion.
80pub trait TransferRegistry: Send + Sync {
81    fn register(&self, transfer_id: &str, stop: Arc<AtomicBool>);
82    fn unregister(&self, transfer_id: &str);
83}