@@ -4,7 +4,7 @@ use super::spi::*;
44use crate :: error:: { self , RSocketError } ;
55use crate :: frame:: { self , Body , Frame } ;
66use crate :: payload:: { Payload , SetupPayload } ;
7- use crate :: spi:: { Flux , RSocket } ;
7+ use crate :: spi:: { Flux , RSocket , ServerResponder } ;
88use crate :: utils:: EmptyRSocket ;
99use crate :: { runtime, Result } ;
1010use async_stream:: stream;
@@ -103,7 +103,7 @@ impl DuplexSocket {
103103 pub ( crate ) async fn dispatch (
104104 & mut self ,
105105 frame : Frame ,
106- acceptor : & Option < Acceptor > ,
106+ acceptor : Option < & ServerResponder > ,
107107 ) -> Result < ( ) > {
108108 if let Some ( frame) = self . join_frame ( frame) . await {
109109 self . process_once ( frame, acceptor) . await ;
@@ -112,7 +112,7 @@ impl DuplexSocket {
112112 }
113113
114114 #[ inline]
115- async fn process_once ( & mut self , msg : Frame , acceptor : & Option < Acceptor > ) {
115+ async fn process_once ( & mut self , msg : Frame , acceptor : Option < & ServerResponder > ) {
116116 let sid = msg. get_stream_id ( ) ;
117117 let flag = msg. get_flag ( ) ;
118118 debug_frame ( false , & msg) ;
@@ -343,10 +343,14 @@ impl DuplexSocket {
343343 }
344344 }
345345
346+ pub ( crate ) async fn bind_responder ( & self , responder : Box < dyn RSocket > ) {
347+ self . responder . set ( responder) . await ;
348+ }
349+
346350 #[ inline]
347351 async fn on_setup (
348352 & self ,
349- acceptor : & Option < Acceptor > ,
353+ acceptor : Option < & ServerResponder > ,
350354 sid : u32 ,
351355 flag : u16 ,
352356 setup : SetupPayload ,
@@ -356,11 +360,7 @@ impl DuplexSocket {
356360 self . responder . set ( Box :: new ( EmptyRSocket ) ) . await ;
357361 Ok ( ( ) )
358362 }
359- Some ( Acceptor :: Simple ( gen) ) => {
360- self . responder . set ( gen ( ) ) . await ;
361- Ok ( ( ) )
362- }
363- Some ( Acceptor :: Generate ( gen) ) => match gen ( setup, Box :: new ( self . clone ( ) ) ) {
363+ Some ( gen) => match gen ( setup, Box :: new ( self . clone ( ) ) ) {
364364 Ok ( it) => {
365365 self . responder . set ( it) . await ;
366366 Ok ( ( ) )
@@ -414,7 +414,7 @@ impl DuplexSocket {
414414 Err ( e) => {
415415 let sending = frame:: Error :: builder ( sid, 0 )
416416 . set_code ( error:: ERR_APPLICATION )
417- . set_data ( Bytes :: from ( "TODO: should be error details" ) )
417+ . set_data ( Bytes :: from ( e . to_string ( ) ) )
418418 . build ( ) ;
419419 if let Err ( e) = tx. send ( sending) {
420420 error ! ( "respond REQUEST_RESPONSE failed: {}" , e) ;
0 commit comments