@@ -18,6 +18,7 @@ use std::collections::HashMap;
1818use std:: net:: SocketAddr ;
1919use std:: sync:: { Arc , Mutex , RwLock } ;
2020use tokio:: net:: TcpStream ;
21+ use tokio:: runtime:: Runtime ;
2122
2223pub enum Acceptor {
2324 Direct ( Box < dyn RSocket > ) ,
@@ -74,6 +75,7 @@ impl Runner {
7475 }
7576 }
7677
78+ #[ inline]
7779 fn respond_metadata_push ( & self , input : Payload ) {
7880 let responder = self . responder . clone ( ) ;
7981 tokio:: spawn ( lazy ( move || {
@@ -82,14 +84,31 @@ impl Runner {
8284 } ) ) ;
8385 }
8486
87+ #[ inline]
8588 fn respond_fnf ( & self , input : Payload ) {
8689 let responder = self . responder . clone ( ) ;
8790 tokio:: spawn ( lazy ( move || {
88- responder. request_fnf ( input) . wait ( ) . unwrap ( ) ;
91+ responder. fire_and_forget ( input) . wait ( ) . unwrap ( ) ;
8992 Ok ( ( ) )
9093 } ) ) ;
9194 }
9295
96+ #[ inline]
97+ fn respond_keepalive ( & self , keepalive : frame:: Keepalive ) {
98+ let tx = self . tx . clone ( ) ;
99+ tokio:: spawn ( lazy ( move || {
100+ let ( d, _) = keepalive. split ( ) ;
101+ let mut bu = frame:: Keepalive :: builder ( 0 , 0 ) ;
102+ if let Some ( b) = d {
103+ bu = bu. set_data ( b) ;
104+ }
105+ let sending = bu. build ( ) ;
106+ tx. send ( sending)
107+ . and_then ( move |_it| Ok ( ( ) ) )
108+ . map_err ( move |e| warn ! ( "send frame failed: {}" , e) )
109+ } ) ) ;
110+ }
111+
93112 #[ inline]
94113 fn respond_request_response ( & self , sid : u32 , _flag : u16 , input : Payload ) {
95114 let responder = self . responder . clone ( ) ;
@@ -116,16 +135,13 @@ impl Runner {
116135 . set_data ( Bytes :: from ( "TODO: should be error details" ) )
117136 . build ( ) ,
118137 } ;
119-
120138 tx. send ( sending)
121- . and_then ( move |_it| {
122- debug ! ( "sent" ) ;
123- Ok ( ( ) )
124- } )
125- . map_err ( move |e| error ! ( "send frame failed: {}" , e) )
139+ . and_then ( move |_it| Ok ( ( ) ) )
140+ . map_err ( move |e| warn ! ( "send frame failed: {}" , e) )
126141 } ) ) ;
127142 }
128143
144+ #[ inline]
129145 fn respond_request_stream ( & self , sid : u32 , flag : u16 , input : Payload ) {
130146 let responder = self . responder . clone ( ) ;
131147 let tx = self . tx . clone ( ) ;
@@ -155,9 +171,9 @@ impl Runner {
155171 } ) ) ;
156172 }
157173
174+ #[ inline]
158175 fn to_future ( self , rx : mpsc:: Receiver < Frame > ) -> impl Future < Item = ( ) , Error = ( ) > + Send {
159- let handlers = self . handlers . clone ( ) ;
160- let task = rx. for_each ( move |f : frame:: Frame | {
176+ let task = rx. for_each ( move |f| {
161177 let sid = f. get_stream_id ( ) ;
162178 let flag = f. get_flag ( ) ;
163179 debug ! ( "incoming frame#{}" , sid) ;
@@ -176,6 +192,7 @@ impl Runner {
176192 Body :: Payload ( v) => {
177193 let pa = Payload :: from ( v) ;
178194 // pick handler
195+ let handlers = self . handlers . clone ( ) ;
179196 let mut senders = handlers. map . write ( ) . unwrap ( ) ;
180197 let handler = senders. remove ( & sid) . unwrap ( ) ;
181198
@@ -217,9 +234,14 @@ impl Runner {
217234 let pa = Payload :: from ( v) ;
218235 self . respond_fnf ( pa) ;
219236 }
237+ Body :: MetadataPush ( v) => {
238+ let pa = Payload :: from ( v) ;
239+ self . respond_metadata_push ( pa) ;
240+ }
220241 Body :: Keepalive ( v) => {
221242 if flag & frame:: FLAG_RESPOND != 0 {
222243 debug ! ( "got keepalive: {:?}" , v) ;
244+ self . respond_keepalive ( v) ;
223245 }
224246 }
225247 _ => unimplemented ! ( ) ,
@@ -243,6 +265,7 @@ impl DuplexSocket {
243265 DuplexSocketBuilder :: new ( )
244266 }
245267
268+ #[ inline]
246269 fn new (
247270 first_stream_id : u32 ,
248271 ctx : Context ,
@@ -253,16 +276,15 @@ impl DuplexSocket {
253276
254277 let handlers = Arc :: new ( Handlers :: new ( ) ) ;
255278 let handlers2 = handlers. clone ( ) ;
256- let tx1 = tp. tx ( ) ;
257- let tx2 = tp. tx ( ) ;
279+ let ( tx, rx) = tp. split ( ) ;
258280
259281 let sk = DuplexSocket {
260- tx : tx1 ,
282+ tx : tx . clone ( ) ,
261283 handlers : handlers,
262284 seq : StreamID :: from ( first_stream_id) ,
263285 } ;
264286
265- let task = Runner :: new ( tx2 , handlers2, responder, sk. clone ( ) ) . to_future ( tp . rx ( ) ) ;
287+ let task = Runner :: new ( tx , handlers2, responder, sk. clone ( ) ) . to_future ( rx ) ;
266288 let fu = lazy ( move || {
267289 tokio:: spawn ( task0) ;
268290 task
@@ -296,7 +318,7 @@ impl DuplexSocket {
296318 let task = tx
297319 . send ( sending)
298320 . map ( |_| ( ) )
299- . map_err ( |e | RSocketError :: from ( "send frame failed" ) ) ;
321+ . map_err ( |_e | RSocketError :: from ( "send frame failed" ) ) ;
300322 Box :: new ( task)
301323 }
302324
@@ -324,7 +346,7 @@ impl RSocket for DuplexSocket {
324346 Box :: new ( fu)
325347 }
326348
327- fn request_fnf ( & self , req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
349+ fn fire_and_forget ( & self , req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
328350 let ( d, m) = req. split ( ) ;
329351 let sid = self . seq . next ( ) ;
330352 let mut bu = frame:: RequestFNF :: builder ( sid, 0 ) ;
@@ -458,9 +480,9 @@ impl RSocket for Responder {
458480 ( * r) . metadata_push ( req)
459481 }
460482
461- fn request_fnf ( & self , req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
483+ fn fire_and_forget ( & self , req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
462484 let r = self . inner . read ( ) . unwrap ( ) ;
463- ( * r) . request_fnf ( req)
485+ ( * r) . fire_and_forget ( req)
464486 }
465487
466488 fn request_response (
@@ -490,7 +512,7 @@ impl RSocket for EmptyRSocket {
490512 Box :: new ( future:: err ( self . must_failed ( ) ) )
491513 }
492514
493- fn request_fnf ( & self , _req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
515+ fn fire_and_forget ( & self , _req : Payload ) -> Box < dyn Future < Item = ( ) , Error = RSocketError > > {
494516 Box :: new ( future:: err ( self . must_failed ( ) ) )
495517 }
496518
0 commit comments