generic_robot_framework/models/
topic.rs

1use std::net::TcpStream;
2use std::io::Write;
3
4#[derive(Debug)]
5pub struct Topic {
6    pub name: String,
7    pub message_type: Option<String>,
8    pub subscribers: Vec<TcpStream>
9}
10
11impl Clone for Topic {
12    fn clone(&self) -> Topic {
13        let mut subscribers: Vec<TcpStream> = vec![];
14
15        for subscriber in &self.subscribers {
16            subscribers.push(subscriber.try_clone().unwrap());
17        }
18
19        Topic {
20            name: self.name.clone(),
21            message_type: self.message_type.clone(),
22            subscribers,
23        }
24    }
25}
26
27impl Topic {
28    pub fn write_to_subscribers(&mut self, buf: &[u8]) {
29        let mut streams_to_remove: Vec<usize> = vec![];
30
31        for (index, mut subscriber) in self.subscribers.iter().enumerate() {
32            match subscriber.write_all(buf) {
33                Ok(_) => {}
34                Err(_) => {
35                    streams_to_remove.push(index);
36                }
37            }
38        }
39
40        for stream in streams_to_remove {
41            let _ = &self.subscribers.remove(stream);
42        }
43    }
44}