@@ -51,9 +51,13 @@ pub(crate) trait MessageBus: Send + Sync {
51
51
}
52
52
}
53
53
54
+ // For requests without an identifier, shared channels are created
55
+ // to route request/response pairs based on message type.
54
56
#[ derive( Debug ) ]
55
57
struct SharedChannels {
58
+ // Maps an inbound reply to channel used to send responses.
56
59
senders : HashMap < IncomingMessages , Arc < Sender < ResponseMessage > > > ,
60
+ // Maps an outbound request to channel used to receive responses.
57
61
receivers : HashMap < OutgoingMessages , Arc < Receiver < ResponseMessage > > > ,
58
62
}
59
63
@@ -64,26 +68,35 @@ impl SharedChannels {
64
68
receivers : HashMap :: new ( ) ,
65
69
} ;
66
70
71
+ // Register request/response pairs.
67
72
instance. register ( OutgoingMessages :: RequestIds , & [ IncomingMessages :: NextValidId ] ) ;
68
73
69
74
instance
70
75
}
71
76
72
- fn register ( & mut self , out : OutgoingMessages , inbound : & [ IncomingMessages ] ) {
77
+ // Maps an outgoing message to incoming message(s)
78
+ fn register ( & mut self , outbound : OutgoingMessages , inbounds : & [ IncomingMessages ] ) {
73
79
let ( sender, receiver) = channel:: unbounded :: < ResponseMessage > ( ) ;
74
- self . receivers . insert ( out, Arc :: new ( receiver) ) ;
80
+
81
+ self . receivers . insert ( outbound, Arc :: new ( receiver) ) ;
75
82
76
83
let sender = & Arc :: new ( sender) ;
77
84
78
- for a in inbound {
79
- self . senders . insert ( * a , Arc :: clone ( sender) ) ;
85
+ for inbound in inbounds {
86
+ self . senders . insert ( * inbound , Arc :: clone ( sender) ) ;
80
87
}
81
88
}
82
89
83
90
pub fn get_receiver ( & self , message_id : OutgoingMessages ) -> Arc < Receiver < ResponseMessage > > {
84
91
let receiver = self . receivers . get ( & message_id) . expect ( "unsupport type" ) ;
85
92
Arc :: clone ( receiver)
86
93
}
94
+
95
+ pub fn get_sender ( & self , message_id : OutgoingMessages ) -> Arc < Receiver < ResponseMessage > > {
96
+ let receiver = self . receivers . get ( & message_id) . expect ( "unsupport type" ) ;
97
+ Arc :: clone ( receiver)
98
+ }
99
+
87
100
}
88
101
89
102
#[ derive( Debug ) ]
0 commit comments