simple/
simple.rs

1use lps::*;
2
3use std::sync::Arc;
4
5#[derive(Debug, Clone)]
6struct TestMsg0(i32);
7
8#[derive(Debug, Clone)]
9struct TestMsg1(i32);
10
11impl Message for TestMsg0 {}
12impl Message for TestMsg1 {}
13
14struct TestPublisher {
15    msg_broker: Arc<dyn MessageBroker>,
16}
17
18impl TestPublisher {
19    fn new(msg_broker: Arc<dyn MessageBroker>) -> Self {
20        Self { msg_broker }
21    }
22}
23
24impl Publisher for TestPublisher {
25    fn message_broker(&self) -> Arc<dyn MessageBroker> {
26        Arc::clone(&self.msg_broker)
27    }
28
29    fn set_message_broker(&mut self, msg_broker: Arc<dyn MessageBroker>) {
30        self.msg_broker = msg_broker;
31    }
32}
33
34struct TestSubsciber0 {
35    sub: Subscription<TestMsg0>,
36}
37
38impl TestSubsciber0 {
39    fn new() -> Self {
40        Self {
41            sub: Subscription::unregistered(),
42        }
43    }
44}
45
46impl Subscriber for TestSubsciber0 {
47    fn subscribe(&mut self, msg_broker: Arc<dyn MessageBroker>) {
48        let _ = self.sub.register(msg_broker);
49    }
50
51    fn unsubscribe(&mut self) {
52        let _ = self.sub.unregister();
53    }
54
55    fn activate(&self) {
56        let _ = self.sub.activate();
57    }
58
59    fn deactivate(&self) {
60        let _ = self.sub.deactivate();
61    }
62
63    fn process_messages(&mut self) {
64        self.sub
65            .message_iter()
66            .handle(|msg: Arc<TestMsg0>| {
67                println!("test_sub0.sub: {:?}", msg);
68            })
69            .run();
70    }
71}
72
73struct TestSubsciber1 {
74    sub: MultiSubscription,
75}
76
77impl TestSubsciber1 {
78    fn new() -> Self {
79        let mut multi_sub = MultiSubscription::unregistered();
80        multi_sub.add::<TestMsg0>().add::<TestMsg1>();
81
82        Self { sub: multi_sub }
83    }
84}
85
86impl Subscriber for TestSubsciber1 {
87    fn subscribe(&mut self, msg_broker: Arc<dyn MessageBroker>) {
88        let _ = self.sub.register(Arc::clone(&msg_broker));
89    }
90
91    fn unsubscribe(&mut self) {
92        let _ = self.sub.unregister();
93    }
94
95    fn activate(&self) {
96        let _ = self.sub.activate();
97    }
98
99    fn deactivate(&self) {
100        let _ = self.sub.deactivate();
101    }
102
103    fn process_messages(&mut self) {
104        self.sub
105            .message_iter()
106            .handle(|msg: Arc<TestMsg0>| {
107                println!("test_sub1.sub0: {:?}", msg);
108            })
109            .handle(|msg: Arc<TestMsg1>| {
110                println!("test_sub1.sub1: {:?}", msg);
111            })
112            .run();
113    }
114}
115
116fn main() {
117    let tb: Arc<dyn MessageBroker> = Arc::new(DefaultMessageBroker::new());
118
119    let mut s0 = TestSubsciber0::new();
120    s0.subscribe(Arc::clone(&tb));
121
122    let mut s1 = TestSubsciber1::new();
123    s1.subscribe(Arc::clone(&tb));
124
125    let p0 = TestPublisher::new(Arc::clone(&tb));
126    let p1 = TestPublisher::new(Arc::clone(&tb));
127
128    p0.publish(Arc::new(TestMsg0(2)));
129    s1.deactivate();
130    p1.publish(Arc::new(TestMsg0(5)));
131    s1.activate();
132    p1.publish(Arc::new(TestMsg1(3)));
133    p1.publish(Arc::new(TestMsg1(6)));
134
135    s0.process_messages();
136    s1.process_messages();
137}