@@ -367,7 +367,7 @@ impl Client {
367367 id,
368368 time_started : Instant :: now ( ) ,
369369 timeout,
370- callback : Callback :: < DynAsyncCallback > :: new ( callback) ,
370+ callback : Callback :: < DynAsyncCallback > :: new_no_ack ( callback) ,
371371 } ;
372372
373373 // add the ack to the tuple of outstanding acks
@@ -376,19 +376,33 @@ impl Client {
376376 self . socket . read ( ) . await . send ( socket_packet) . await
377377 }
378378
379- async fn callback < P : Into < Payload > > ( & self , event : & Event , payload : P ) -> Result < ( ) > {
379+ pub async fn ack < D > ( & self , ack_id : AckId , data : D ) -> Result < ( ) >
380+ where
381+ D : Into < Payload > ,
382+ {
383+ let socket_packet = Packet :: new_ack ( data. into ( ) , & self . nsp , ack_id) ;
384+
385+ self . socket . read ( ) . await . send ( socket_packet) . await
386+ }
387+
388+ async fn callback < P : Into < Payload > > (
389+ & self ,
390+ event : & Event ,
391+ payload : P ,
392+ ack_id : Option < AckId > ,
393+ ) -> Result < ( ) > {
380394 let mut builder = self . builder . write ( ) . await ;
381395 let payload = payload. into ( ) ;
382396
383397 if let Some ( callback) = builder. on . get_mut ( event) {
384- callback ( payload. clone ( ) , self . clone ( ) ) . await ;
398+ callback ( payload. clone ( ) , self . clone ( ) , ack_id ) . await ;
385399 }
386400
387401 // Call on_any for all common and custom events.
388402 match event {
389403 Event :: Message | Event :: Custom ( _) => {
390404 if let Some ( callback) = builder. on_any . as_mut ( ) {
391- callback ( event. clone ( ) , payload, self . clone ( ) ) . await ;
405+ callback ( event. clone ( ) , payload, self . clone ( ) , ack_id ) . await ;
392406 }
393407 }
394408 _ => ( ) ,
@@ -411,6 +425,7 @@ impl Client {
411425 ack. callback . deref_mut ( ) (
412426 Payload :: from ( payload. to_owned ( ) ) ,
413427 self . clone ( ) ,
428+ None ,
414429 )
415430 . await ;
416431 }
@@ -419,6 +434,7 @@ impl Client {
419434 ack. callback . deref_mut ( ) (
420435 Payload :: Binary ( payload. to_owned ( ) ) ,
421436 self . clone ( ) ,
437+ None ,
422438 )
423439 . await ;
424440 }
@@ -446,8 +462,12 @@ impl Client {
446462
447463 if let Some ( attachments) = & packet. attachments {
448464 if let Some ( binary_payload) = attachments. get ( 0 ) {
449- self . callback ( & event, Payload :: Binary ( binary_payload. to_owned ( ) ) )
450- . await ?;
465+ self . callback (
466+ & event,
467+ Payload :: Binary ( binary_payload. to_owned ( ) ) ,
468+ packet. id ,
469+ )
470+ . await ?;
451471 }
452472 }
453473 Ok ( ( ) )
@@ -480,7 +500,7 @@ impl Client {
480500 } ;
481501
482502 // call the correct callback
483- self . callback ( & event, payloads. to_vec ( ) ) . await ?;
503+ self . callback ( & event, payloads. to_vec ( ) , packet . id ) . await ?;
484504 }
485505
486506 Ok ( ( ) )
@@ -495,22 +515,22 @@ impl Client {
495515 match packet. packet_type {
496516 PacketId :: Ack | PacketId :: BinaryAck => {
497517 if let Err ( err) = self . handle_ack ( packet) . await {
498- self . callback ( & Event :: Error , err. to_string ( ) ) . await ?;
518+ self . callback ( & Event :: Error , err. to_string ( ) , None ) . await ?;
499519 return Err ( err) ;
500520 }
501521 }
502522 PacketId :: BinaryEvent => {
503523 if let Err ( err) = self . handle_binary_event ( packet) . await {
504- self . callback ( & Event :: Error , err. to_string ( ) ) . await ?;
524+ self . callback ( & Event :: Error , err. to_string ( ) , None ) . await ?;
505525 }
506526 }
507527 PacketId :: Connect => {
508528 * ( self . disconnect_reason . write ( ) . await ) = DisconnectReason :: default ( ) ;
509- self . callback ( & Event :: Connect , "" ) . await ?;
529+ self . callback ( & Event :: Connect , "" , None ) . await ?;
510530 }
511531 PacketId :: Disconnect => {
512532 * ( self . disconnect_reason . write ( ) . await ) = DisconnectReason :: Server ;
513- self . callback ( & Event :: Close , "" ) . await ?;
533+ self . callback ( & Event :: Close , "" , None ) . await ?;
514534 }
515535 PacketId :: ConnectError => {
516536 self . callback (
@@ -520,12 +540,13 @@ impl Client {
520540 . data
521541 . as_ref ( )
522542 . unwrap_or ( & String :: from ( "\" No error message provided\" " ) ) ,
543+ None ,
523544 )
524545 . await ?;
525546 }
526547 PacketId :: Event => {
527548 if let Err ( err) = self . handle_event ( packet) . await {
528- self . callback ( & Event :: Error , err. to_string ( ) ) . await ?;
549+ self . callback ( & Event :: Error , err. to_string ( ) , None ) . await ?;
529550 }
530551 }
531552 }
@@ -547,7 +568,7 @@ impl Client {
547568 None => None ,
548569 Some ( Err ( err) ) => {
549570 // call the error callback
550- match self . callback ( & Event :: Error , err. to_string ( ) ) . await {
571+ match self . callback ( & Event :: Error , err. to_string ( ) , None ) . await {
551572 Err ( callback_err) => Some ( ( Err ( callback_err) , socket) ) ,
552573 Ok ( _) => Some ( ( Err ( err) , socket) ) ,
553574 }
0 commit comments