system: add self_notify function to Subscription

This commit is contained in:
ghassmo
2022-06-25 15:41:50 +03:00
parent 7a54e4172f
commit bf946b3876

View File

@@ -11,6 +11,7 @@ pub type SubscriptionId = u64;
pub struct Subscription<T> {
id: SubscriptionId,
recv_queue: async_channel::Receiver<T>,
send_queue: async_channel::Sender<T>,
parent: Arc<Subscriber<T>>,
}
@@ -26,6 +27,15 @@ impl<T: Clone> Subscription<T> {
}
}
pub async fn self_notify(&self, message: T) {
match self.send_queue.send(message).await {
Ok(_) => {}
Err(err) => {
panic!("MessageSubscription::self_notify() send_queue failed! {}", err);
}
}
}
// Must be called manually since async Drop is not possible in Rust
pub async fn unsubscribe(&self) {
self.parent.clone().unsubscribe(self.id).await
@@ -52,9 +62,9 @@ impl<T: Clone> Subscriber<T> {
let sub_id = Self::random_id();
self.subs.lock().await.insert(sub_id, sender);
self.subs.lock().await.insert(sub_id, sender.clone());
Subscription { id: sub_id, recv_queue: recvr, parent: self.clone() }
Subscription { id: sub_id, recv_queue: recvr, send_queue: sender, parent: self.clone() }
}
async fn unsubscribe(self: Arc<Self>, sub_id: SubscriptionId) {