generic_robot_framework/models/
topic.rs1use 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}