Deliver message to exactly one member (round-robin). Remove dead members.
(&mut self, msg: &PubSubMessage)
| 70 | |
| 71 | /// Deliver message to exactly one member (round-robin). Remove dead members. |
| 72 | fn deliver(&mut self, msg: &PubSubMessage) { |
| 73 | if self.members.is_empty() { |
| 74 | return; |
| 75 | } |
| 76 | let mut attempts = 0; |
| 77 | while attempts < self.members.len() { |
| 78 | let idx = self.next_index % self.members.len(); |
| 79 | self.next_index = idx + 1; |
| 80 | if self.members[idx].1.try_send(msg.clone()).is_ok() { |
| 81 | return; |
| 82 | } |
| 83 | // Dead member — remove and try next. |
| 84 | self.members.remove(idx); |
| 85 | if self.next_index > 0 { |
| 86 | self.next_index -= 1; |
| 87 | } |
| 88 | attempts += 1; |
| 89 | } |
| 90 | } |
| 91 | } |
| 92 | |
| 93 | /// A named topic with bounded message log and active subscribers. |