1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use super::middleware::MessageHandlerMiddleware;
use crate::{
actor::DhtRequester,
config::DhtConfig,
outbound::OutboundMessageRequester,
store_forward::StoreAndForwardRequester,
};
use futures::channel::mpsc;
use std::sync::Arc;
use tari_comms::peer_manager::{NodeIdentity, PeerManager};
use tower::layer::Layer;
pub struct MessageHandlerLayer {
config: DhtConfig,
saf_requester: StoreAndForwardRequester,
dht_requester: DhtRequester,
peer_manager: Arc<PeerManager>,
node_identity: Arc<NodeIdentity>,
outbound_service: OutboundMessageRequester,
saf_response_signal_sender: mpsc::Sender<()>,
}
impl MessageHandlerLayer {
pub fn new(
config: DhtConfig,
saf_requester: StoreAndForwardRequester,
dht_requester: DhtRequester,
node_identity: Arc<NodeIdentity>,
peer_manager: Arc<PeerManager>,
outbound_service: OutboundMessageRequester,
saf_response_signal_sender: mpsc::Sender<()>,
) -> Self
{
Self {
config,
saf_requester,
dht_requester,
node_identity,
peer_manager,
outbound_service,
saf_response_signal_sender,
}
}
}
impl<S> Layer<S> for MessageHandlerLayer {
type Service = MessageHandlerMiddleware<S>;
fn layer(&self, service: S) -> Self::Service {
MessageHandlerMiddleware::new(
self.config.clone(),
service,
self.saf_requester.clone(),
self.dht_requester.clone(),
Arc::clone(&self.node_identity),
Arc::clone(&self.peer_manager),
self.outbound_service.clone(),
self.saf_response_signal_sender.clone(),
)
}
}