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}