Skip to main content

eureka_mmanager/download/chapter/task/messages/
sub.rs

1use std::ops::Deref;
2
3use actix::prelude::*;
4
5use crate::{
6    download::{
7        chapter::task::{ChapterDownloadTask as Task, ChapterDownloadTaskState as State},
8        messages::SubcribeMessage,
9        traits::task::Subscribe,
10    },
11    recipients::MaybeWeakRecipient,
12};
13
14impl Handler<SubcribeMessage<State>> for Task {
15    type Result = <SubcribeMessage<State> as Message>::Result;
16    fn handle(&mut self, _msg: SubcribeMessage<State>, _ctx: &mut Self::Context) -> Self::Result {
17        self.subscribe(_msg.0)
18    }
19}
20
21impl Subscribe for Task {
22    fn subscribe(
23        &mut self,
24        subscriber: MaybeWeakRecipient<
25            crate::download::messages::TaskSubscriberMessages<Self::State>,
26        >,
27    ) {
28        subscriber.do_send(crate::download::messages::TaskSubscriberMessages::ID(
29            self.id,
30        ));
31        subscriber.do_send(crate::download::messages::TaskSubscriberMessages::State(
32            self.state.read().deref().clone(),
33        ));
34        self.subscribers.push_recipient(subscriber);
35    }
36}