signald_rust/socket/
test.rs

1use std::sync::{Arc, Mutex};
2use bus::{Bus, BusReader};
3use crate::signaldresponse::SignaldResponse;
4use crate::signaldrequest::SignaldRequest;
5use crate::socket::Socket;
6use crate::signaldresponse::ResponseType::BusUpdate;
7use std::thread;
8use std::time::Duration;
9
10#[allow(dead_code)]
11pub struct TestSignaldSocket {
12    bus: Arc<Mutex<Bus<SignaldResponse>>>,
13}
14impl TestSignaldSocket {
15    pub fn new(bus_size: usize) -> TestSignaldSocket {
16        let bus = Arc::new(Mutex::new(Bus::new(bus_size)));
17
18        // An update message every second to make sure that the receivers can verify the time they're waiting
19        // When there are no messages on the bus the receivers would otherwise be stuck waiting
20        // This is a hacky implementation and should be changed once recv_deadline can be implemented
21        let bus_tx_seconds = bus.clone();
22        let update_response = SignaldResponse {
23            id: None,
24            data: BusUpdate
25        };
26        thread::spawn(move || {
27            loop {
28                thread::sleep(Duration::from_secs(1));
29                bus_tx_seconds.lock().unwrap().broadcast(update_response.clone());
30            }
31        });
32
33        Self {
34            bus,
35        }
36    }
37
38    pub fn get_tx(&mut self) -> Arc<Mutex<Bus<SignaldResponse>>> {
39        self.bus.clone()
40    }
41}
42impl Socket for TestSignaldSocket {
43    fn send_request(&mut self, _request: &SignaldRequest) {
44        unimplemented!()
45    }
46
47    fn get_rx(&mut self) -> BusReader<SignaldResponse> {
48        self.bus.lock().unwrap().add_rx()
49    }
50}