File tree 2 files changed +34
-5
lines changed
2 files changed +34
-5
lines changed Original file line number Diff line number Diff line change @@ -209,13 +209,11 @@ export class Client<
209
209
const encodedPackets = opts . preEncoded
210
210
? ( packet as any [ ] ) // previous versions of the adapter incorrectly used socket.packet() instead of writeToEngine()
211
211
: this . encoder . encode ( packet as Packet ) ;
212
- for ( const encodedPacket of encodedPackets ) {
213
- this . writeToEngine ( encodedPacket , opts ) ;
214
- }
212
+ this . writeToEngine ( encodedPackets , opts ) ;
215
213
}
216
214
217
215
private writeToEngine (
218
- encodedPacket : String | Buffer ,
216
+ encodedPackets : Array < String | Buffer > ,
219
217
opts : WriteOptions
220
218
) : void {
221
219
if ( opts . volatile && ! this . conn . transport . writable ) {
@@ -224,7 +222,12 @@ export class Client<
224
222
) ;
225
223
return ;
226
224
}
227
- this . conn . write ( encodedPacket , opts ) ;
225
+ const packets = Array . isArray ( encodedPackets )
226
+ ? encodedPackets
227
+ : [ encodedPackets ] ;
228
+ for ( const encodedPacket of packets ) {
229
+ this . conn . write ( encodedPacket , opts ) ;
230
+ }
228
231
}
229
232
230
233
/**
Original file line number Diff line number Diff line change @@ -1382,6 +1382,32 @@ describe("socket.io", () => {
1382
1382
} , 200 ) ;
1383
1383
} ) ;
1384
1384
1385
+ it ( "should emit only one consecutive volatile event with binary (ws)" , ( done ) => {
1386
+ const srv = createServer ( ) ;
1387
+ const sio = new Server ( srv , { transports : [ "websocket" ] } ) ;
1388
+
1389
+ let counter = 0 ;
1390
+ srv . listen ( ( ) => {
1391
+ sio . on ( "connection" , ( s ) => {
1392
+ // Wait to make sure there are no packets being sent for opening the connection
1393
+ setTimeout ( ( ) => {
1394
+ s . volatile . emit ( "ev" , Buffer . from ( [ 1 , 2 , 3 ] ) ) ;
1395
+ s . volatile . emit ( "ev" , Buffer . from ( [ 4 , 5 , 6 ] ) ) ;
1396
+ } , 20 ) ;
1397
+ } ) ;
1398
+
1399
+ const socket = client ( srv , { transports : [ "websocket" ] } ) ;
1400
+ socket . on ( "ev" , ( ) => {
1401
+ counter ++ ;
1402
+ } ) ;
1403
+ } ) ;
1404
+
1405
+ setTimeout ( ( ) => {
1406
+ expect ( counter ) . to . be ( 1 ) ;
1407
+ done ( ) ;
1408
+ } , 200 ) ;
1409
+ } ) ;
1410
+
1385
1411
it ( "should emit regular events after trying a failed volatile event (polling)" , ( done ) => {
1386
1412
const srv = createServer ( ) ;
1387
1413
const sio = new Server ( srv , { transports : [ "polling" ] } ) ;
You can’t perform that action at this time.
0 commit comments