@@ -188,7 +188,7 @@ impl Client {
188188 // We don't need to do that in the other cases, since proper server close
189189 // and manual client close are handled explicitly.
190190 if let Some ( err) = client_clone
191- . callback ( & Event :: Close , CloseReason :: TransportClose . as_str ( ) )
191+ . callback ( & Event :: Close , CloseReason :: TransportClose . as_str ( ) , None )
192192 . await
193193 . err ( )
194194 {
@@ -410,19 +410,33 @@ impl Client {
410410 self . socket . read ( ) . await . send ( socket_packet) . await
411411 }
412412
413- async fn callback < P : Into < Payload > > ( & self , event : & Event , payload : P ) -> Result < ( ) > {
413+ pub async fn ack < D > ( & self , ack_id : i32 , data : D ) -> Result < ( ) >
414+ where
415+ D : Into < Payload > ,
416+ {
417+ let socket_packet = Packet :: new_ack ( data. into ( ) , & self . nsp , ack_id) ;
418+
419+ self . socket . read ( ) . await . send ( socket_packet) . await
420+ }
421+
422+ async fn callback < P : Into < Payload > > (
423+ & self ,
424+ event : & Event ,
425+ payload : P ,
426+ ack_id : Option < i32 > ,
427+ ) -> Result < ( ) > {
414428 let mut builder = self . builder . write ( ) . await ;
415429 let payload = payload. into ( ) ;
416430
417431 if let Some ( callback) = builder. on . get_mut ( event) {
418- callback ( payload. clone ( ) , self . clone ( ) ) . await ;
432+ callback ( payload. clone ( ) , self . clone ( ) , ack_id ) . await ;
419433 }
420434
421435 // Call on_any for all common and custom events.
422436 match event {
423437 Event :: Message | Event :: Custom ( _) => {
424438 if let Some ( callback) = builder. on_any . as_mut ( ) {
425- callback ( event. clone ( ) , payload, self . clone ( ) ) . await ;
439+ callback ( event. clone ( ) , payload, self . clone ( ) , ack_id ) . await ;
426440 }
427441 }
428442 _ => ( ) ,
@@ -445,6 +459,7 @@ impl Client {
445459 ack. callback . deref_mut ( ) (
446460 Payload :: from ( payload. to_owned ( ) ) ,
447461 self . clone ( ) ,
462+ None ,
448463 )
449464 . await ;
450465 }
@@ -453,6 +468,7 @@ impl Client {
453468 ack. callback . deref_mut ( ) (
454469 Payload :: Binary ( payload. to_owned ( ) ) ,
455470 self . clone ( ) ,
471+ None ,
456472 )
457473 . await ;
458474 }
@@ -480,8 +496,12 @@ impl Client {
480496
481497 if let Some ( attachments) = & packet. attachments {
482498 if let Some ( binary_payload) = attachments. get ( 0 ) {
483- self . callback ( & event, Payload :: Binary ( binary_payload. to_owned ( ) ) )
484- . await ?;
499+ self . callback (
500+ & event,
501+ Payload :: Binary ( binary_payload. to_owned ( ) ) ,
502+ packet. id ,
503+ )
504+ . await ?;
485505 }
486506 }
487507 Ok ( ( ) )
@@ -514,7 +534,7 @@ impl Client {
514534 } ;
515535
516536 // call the correct callback
517- self . callback ( & event, payloads. to_vec ( ) ) . await ?;
537+ self . callback ( & event, payloads. to_vec ( ) , packet . id ) . await ?;
518538 }
519539
520540 Ok ( ( ) )
@@ -529,23 +549,27 @@ impl Client {
529549 match packet. packet_type {
530550 PacketId :: Ack | PacketId :: BinaryAck => {
531551 if let Err ( err) = self . handle_ack ( packet) . await {
532- self . callback ( & Event :: Error , err. to_string ( ) ) . await ?;
552+ self . callback ( & Event :: Error , err. to_string ( ) , None ) . await ?;
533553 return Err ( err) ;
534554 }
535555 }
536556 PacketId :: BinaryEvent => {
537557 if let Err ( err) = self . handle_binary_event ( packet) . await {
538- self . callback ( & Event :: Error , err. to_string ( ) ) . await ?;
558+ self . callback ( & Event :: Error , err. to_string ( ) , None ) . await ?;
539559 }
540560 }
541561 PacketId :: Connect => {
542562 * ( self . disconnect_reason . write ( ) . await ) = DisconnectReason :: default ( ) ;
543- self . callback ( & Event :: Connect , "" ) . await ?;
563+ self . callback ( & Event :: Connect , "" , None ) . await ?;
544564 }
545565 PacketId :: Disconnect => {
546566 * ( self . disconnect_reason . write ( ) . await ) = DisconnectReason :: Server ;
547- self . callback ( & Event :: Close , CloseReason :: IOServerDisconnect . as_str ( ) )
548- . await ?;
567+ self . callback (
568+ & Event :: Close ,
569+ CloseReason :: IOServerDisconnect . as_str ( ) ,
570+ None ,
571+ )
572+ . await ?;
549573 }
550574 PacketId :: ConnectError => {
551575 self . callback (
@@ -555,12 +579,13 @@ impl Client {
555579 . data
556580 . as_ref ( )
557581 . unwrap_or ( & String :: from ( "\" No error message provided\" " ) ) ,
582+ None ,
558583 )
559584 . await ?;
560585 }
561586 PacketId :: Event => {
562587 if let Err ( err) = self . handle_event ( packet) . await {
563- self . callback ( & Event :: Error , err. to_string ( ) ) . await ?;
588+ self . callback ( & Event :: Error , err. to_string ( ) , None ) . await ?;
564589 }
565590 }
566591 }
@@ -582,7 +607,7 @@ impl Client {
582607 None => None ,
583608 Some ( Err ( err) ) => {
584609 // call the error callback
585- match self . callback ( & Event :: Error , err. to_string ( ) ) . await {
610+ match self . callback ( & Event :: Error , err. to_string ( ) , None ) . await {
586611 Err ( callback_err) => Some ( ( Err ( callback_err) , socket) ) ,
587612 Ok ( _) => Some ( ( Err ( err) , socket) ) ,
588613 }
0 commit comments