@@ -12,7 +12,7 @@ use std::{
12
12
time:: Duration ,
13
13
} ;
14
14
15
- use engineioxide:: socket:: { DisconnectReason as EIoDisconnectReason , Permit , PermitIterator } ;
15
+ use engineioxide:: socket:: { DisconnectReason as EIoDisconnectReason , Permit } ;
16
16
use serde:: { de:: DeserializeOwned , Serialize } ;
17
17
use serde_json:: Value ;
18
18
use tokio:: sync:: oneshot:: { self , Receiver } ;
@@ -101,12 +101,11 @@ impl From<EIoDisconnectReason> for DisconnectReason {
101
101
}
102
102
}
103
103
104
- pub ( crate ) trait PermitIteratorExt < ' a > :
105
- ExactSizeIterator < Item = Permit < ' a > > + Sized
106
- {
107
- fn emit ( mut self , mut packet : Packet < ' _ > ) {
108
- debug_assert ! ( self . len( ) > 0 , "No permits available to send the message" ) ;
109
-
104
+ pub ( crate ) trait PermitExt < ' a > {
105
+ fn send ( self , packet : Packet < ' _ > ) ;
106
+ }
107
+ impl < ' a > PermitExt < ' a > for Permit < ' a > {
108
+ fn send ( self , mut packet : Packet < ' _ > ) {
110
109
let bin_payloads = match packet. inner {
111
110
PacketData :: BinaryEvent ( _, ref mut bin, _) | PacketData :: BinaryAck ( ref mut bin, _) => {
112
111
Some ( std:: mem:: take ( & mut bin. bin ) )
@@ -117,13 +116,12 @@ pub(crate) trait PermitIteratorExt<'a>:
117
116
let msg = packet. into ( ) ;
118
117
119
118
if let Some ( bin_payloads) = bin_payloads {
120
- self . next ( ) . unwrap ( ) . emit_many ( msg, bin_payloads) ;
119
+ self . emit_many ( msg, bin_payloads) ;
121
120
} else {
122
- self . next ( ) . unwrap ( ) . emit ( msg) ;
121
+ self . emit ( msg) ;
123
122
}
124
123
}
125
124
}
126
- impl < ' a > PermitIteratorExt < ' a > for PermitIterator < ' a > { }
127
125
128
126
/// A Socket represents a client connected to a namespace.
129
127
/// It is used to send and receive messages from the client, join and leave rooms, etc.
@@ -314,8 +312,8 @@ impl<A: Adapter> Socket<A> {
314
312
return Err ( SendError :: Socket ( SocketError :: Closed ( data) ) ) ;
315
313
}
316
314
317
- let permits = match self . reserve ( 1 ) {
318
- Ok ( permits ) => permits ,
315
+ let permit = match self . reserve ( ) {
316
+ Ok ( permit ) => permit ,
319
317
Err ( e) => {
320
318
#[ cfg( feature = "tracing" ) ]
321
319
tracing:: debug!( "sending error during emit message: {e:?}" ) ;
@@ -325,7 +323,7 @@ impl<A: Adapter> Socket<A> {
325
323
326
324
let ns = self . ns ( ) ;
327
325
let data = serde_json:: to_value ( data) ?;
328
- permits . emit ( Packet :: event ( ns, event. into ( ) , data) ) ;
326
+ permit . send ( Packet :: event ( ns, event. into ( ) , data) ) ;
329
327
Ok ( ( ) )
330
328
}
331
329
@@ -388,8 +386,8 @@ impl<A: Adapter> Socket<A> {
388
386
if !self . connected ( ) {
389
387
return Err ( SendError :: Socket ( SocketError :: Closed ( data) ) ) ;
390
388
}
391
- let permits = match self . reserve ( 1 ) {
392
- Ok ( permits ) => permits ,
389
+ let permit = match self . reserve ( ) {
390
+ Ok ( permit ) => permit ,
393
391
Err ( e) => {
394
392
#[ cfg( feature = "tracing" ) ]
395
393
tracing:: debug!( "sending error during emit message: {e:?}" ) ;
@@ -398,7 +396,7 @@ impl<A: Adapter> Socket<A> {
398
396
} ;
399
397
let data = serde_json:: to_value ( data) ?;
400
398
let packet = Packet :: event ( self . ns ( ) , event. into ( ) , data) ;
401
- let rx = self . send_with_ack_permit ( packet, permits ) ;
399
+ let rx = self . send_with_ack_permit ( packet, permit ) ;
402
400
let stream = AckInnerStream :: send ( rx, self . config . ack_timeout , self . id ) ;
403
401
Ok ( AckStream :: < V > :: from ( stream) )
404
402
}
@@ -649,26 +647,26 @@ impl<A: Adapter> Socket<A> {
649
647
& self . ns . path
650
648
}
651
649
652
- pub ( crate ) fn reserve ( & self , n : usize ) -> Result < PermitIterator < ' _ > , SocketError < ( ) > > {
653
- Ok ( self . esocket . reserve ( n ) ?)
650
+ pub ( crate ) fn reserve ( & self ) -> Result < Permit < ' _ > , SocketError < ( ) > > {
651
+ Ok ( self . esocket . reserve ( ) ?)
654
652
}
655
653
656
654
pub ( crate ) fn send ( & self , packet : Packet < ' _ > ) -> Result < ( ) , SocketError < ( ) > > {
657
- let permits = self . reserve ( 1 ) ?;
658
- permits . emit ( packet) ;
655
+ let permit = self . reserve ( ) ?;
656
+ permit . send ( packet) ;
659
657
Ok ( ( ) )
660
658
}
661
659
662
660
pub ( crate ) fn send_with_ack_permit (
663
661
& self ,
664
662
mut packet : Packet < ' _ > ,
665
- permits : PermitIterator < ' _ > ,
663
+ permit : Permit < ' _ > ,
666
664
) -> Receiver < AckResult < Value > > {
667
665
let ( tx, rx) = oneshot:: channel ( ) ;
668
666
669
667
let ack = self . ack_counter . fetch_add ( 1 , Ordering :: SeqCst ) + 1 ;
670
668
packet. inner . set_ack_id ( ack) ;
671
- permits . emit ( packet) ;
669
+ permit . send ( packet) ;
672
670
self . ack_message . lock ( ) . unwrap ( ) . insert ( ack, tx) ;
673
671
rx
674
672
}
0 commit comments