@@ -408,6 +408,29 @@ export default abstract class AMQPBaseClient {
408408 channel . resolvePromise ( consumerTag )
409409 break
410410 }
411+ case 30 : { // cancel
412+ const [ consumerTag , len ] = view . getShortString ( i ) ; i += len
413+ const noWait = view . getUint8 ( i ) === 1 ; i += 1
414+
415+ const consumer = channel . consumers . get ( consumerTag )
416+ if ( consumer ) {
417+ consumer . setClosed ( new AMQPError ( "Consumer cancelled by the server" , this ) )
418+ channel . consumers . delete ( consumerTag )
419+ }
420+ if ( ! noWait ) {
421+ const frame = new AMQPView ( new ArrayBuffer ( 512 ) )
422+ frame . setUint8 ( j , 1 ) ; j += 1 // type: method
423+ frame . setUint16 ( j , channel . id ) ; j += 2 // channel
424+ frame . setUint32 ( j , 0 ) ; j += 4 // frameSize
425+ frame . setUint16 ( j , 60 ) ; j += 2 // class: basic
426+ frame . setUint16 ( j , 31 ) ; j += 2 // method: cancelOk
427+ j += frame . setShortString ( j , consumerTag ) // tag
428+ frame . setUint8 ( j , 206 ) ; j += 1 // frame end byte
429+ frame . setUint32 ( 3 , j - 8 ) // update frameSize
430+ this . send ( new Uint8Array ( frame . buffer , 0 , j ) )
431+ }
432+ break
433+ }
411434 case 31 : { // cancelOk
412435 const [ consumerTag , len ] = view . getShortString ( i ) ; i += len
413436 channel . resolvePromise ( consumerTag )
0 commit comments