| 551 | } |
| 552 | |
| 553 | pub fn send_updates(&self, changelog: &[IndexChange]) { |
| 554 | let mut listeners = self.listeners.lock().unwrap(); |
| 555 | if listeners.is_empty() { |
| 556 | return; |
| 557 | } |
| 558 | info!( |
| 559 | "sending {} update(s) to {} sse client(s)", |
| 560 | changelog.len(), |
| 561 | listeners.len() |
| 562 | ); |
| 563 | // send updates while dropping unresponsive listeners |
| 564 | listeners.retain(|listener| { |
| 565 | changelog |
| 566 | .iter() |
| 567 | .filter(|change| listener.filter.matches(change)) |
| 568 | .all(|change| listener.tx.send(change.clone()).is_ok()) |
| 569 | }) |
| 570 | } |
| 571 | |
| 572 | pub fn addr(&self) -> net::SocketAddr { |
| 573 | self.addr |