@@ -14,14 +14,14 @@ use crate::payload::{Payload, SetupPayload, SetupPayloadBuilder};
14
14
use crate :: runtime;
15
15
use crate :: spi:: { ClientResponder , Flux , RSocket } ;
16
16
use crate :: transport:: {
17
- self , Connection , DuplexSocket , FrameSink , FrameStream , Splitter , Transport ,
17
+ self , Connection , DuplexSocket , FrameSink , FrameStream , ClientRequester , Splitter , Transport ,
18
18
} ;
19
19
use crate :: Result ;
20
20
21
21
#[ derive( Clone ) ]
22
22
pub struct Client {
23
23
closed : Arc < Notify > ,
24
- socket : DuplexSocket ,
24
+ requester : ClientRequester ,
25
25
closing : mpsc:: Sender < ( ) > ,
26
26
}
27
27
@@ -130,9 +130,9 @@ where
130
130
131
131
let ( snd_tx, mut snd_rx) = mpsc:: unbounded_channel :: < Frame > ( ) ;
132
132
let cloned_snd_tx = snd_tx. clone ( ) ;
133
- let mut socket = DuplexSocket :: new ( 1 , snd_tx, splitter) . await ;
133
+ let mut socket = DuplexSocket :: new ( 1 , snd_tx, splitter) ;
134
134
135
- let mut cloned_socket = socket. clone ( ) ;
135
+ let requester = socket. client_requester ( ) ;
136
136
137
137
if let Some ( f) = self . responder {
138
138
let responder = f ( ) ;
@@ -211,10 +211,13 @@ where
211
211
}
212
212
} ) ;
213
213
214
+
215
+ socket. setup ( setup) . await ?;
216
+
214
217
// process frames
215
218
runtime:: spawn ( async move {
216
219
while let Some ( next) = read_rx. recv ( ) . await {
217
- if let Err ( e) = cloned_socket . dispatch ( next, None ) . await {
220
+ if let Err ( e) = socket . dispatch ( next, None ) . await {
218
221
error ! ( "dispatch frame failed: {}" , e) ;
219
222
break ;
220
223
}
@@ -237,16 +240,14 @@ where
237
240
}
238
241
} ) ;
239
242
240
- socket. setup ( setup) . await ?;
241
-
242
- Ok ( Client :: new ( socket, close_notify, closing) )
243
+ Ok ( Client :: new ( requester, close_notify, closing) )
243
244
}
244
245
}
245
246
246
247
impl Client {
247
- fn new ( socket : DuplexSocket , closed : Arc < Notify > , closing : mpsc:: Sender < ( ) > ) -> Client {
248
+ fn new ( requester : ClientRequester , closed : Arc < Notify > , closing : mpsc:: Sender < ( ) > ) -> Client {
248
249
Client {
249
- socket ,
250
+ requester ,
250
251
closed,
251
252
closing,
252
253
}
@@ -260,22 +261,22 @@ impl Client {
260
261
#[ async_trait]
261
262
impl RSocket for Client {
262
263
async fn metadata_push ( & self , req : Payload ) -> Result < ( ) > {
263
- self . socket . metadata_push ( req) . await
264
+ self . requester . metadata_push ( req) . await
264
265
}
265
266
266
267
async fn fire_and_forget ( & self , req : Payload ) -> Result < ( ) > {
267
- self . socket . fire_and_forget ( req) . await
268
+ self . requester . fire_and_forget ( req) . await
268
269
}
269
270
270
271
async fn request_response ( & self , req : Payload ) -> Result < Option < Payload > > {
271
- self . socket . request_response ( req) . await
272
+ self . requester . request_response ( req) . await
272
273
}
273
274
274
275
fn request_stream ( & self , req : Payload ) -> Flux < Result < Payload > > {
275
- self . socket . request_stream ( req)
276
+ self . requester . request_stream ( req)
276
277
}
277
278
278
279
fn request_channel ( & self , reqs : Flux < Result < Payload > > ) -> Flux < Result < Payload > > {
279
- self . socket . request_channel ( reqs)
280
+ self . requester . request_channel ( reqs)
280
281
}
281
282
}
0 commit comments