pulsar_network/client/
broadcast.rs

1use crate::envelope::{ Envelope, Kind };
2use crate::{Client, Message};
3use fides::chacha20poly1305;
4use std::sync::Arc;
5
6impl Client {
7
8    pub fn broadcast(&self, message: Message) {
9
10        let outgoing_socket_clone = Arc::clone(&self.outgoing_socket);
11
12        let outgoing_socket = outgoing_socket_clone.lock().unwrap();
13        
14        let tables_clone = Arc::clone(&self.peers);
15
16        let tables = tables_clone.lock().unwrap();
17
18        for (_, table) in tables.clone() {
19
20            for (_, peer) in table {
21
22                match chacha20poly1305::encrypt(&peer.shared_key, &message.to_bytes()) {
23
24                    Ok(cipher) => {
25
26                        let envelope = Envelope::new(Kind::Encrypted, &cipher, &self.public_key, &self.route);
27                        
28                        let _r = outgoing_socket.send_to(&envelope.to_bytes(), &peer.address);
29
30                    },
31                    
32                    Err(_) => ()
33
34                }
35
36            }
37
38        }
39
40    }
41
42}