I create a peer with the below code
async join(): Promise<void> {
const protooTransport = new protooClient.WebSocketTransport(
this.mediaServerSocketUrl
)
this.protooPeer = new protooClient.Peer(protooTransport)
// register protooPeer events
}
And having a close function
close(): void {
if (this.closed) return
this.closed = true
logger.info('close()')
// Close protoo Peer
this.protooPeer?.close()
if (this.sendTransport) this.sendTransport.close()
if (this.recvTransport) this.recvTransport.close()
if (this.micProducer) this.micProducer.close()
if (this.webcamProducer) this.webcamProducer.close()
this.consumers.forEach((consumer) => {
consumer.close()
})
}
Calling this.protooPeer?.close()
will not emit this.protooPeer.on('close', () => {...}
and in result I still receive notifications like for example activeSpeaker.
I also assume that it will close the underlying protooClient.WebSocketTransport
.
Server side the peer.on('close', () => {...}
also not invoked which I believe is the issue.
When I stop the application server-side will invoke close and cleanup.
mediasoup:Transport close() +25s
mediasoup:Channel request() [method:transport.close, id:13] +25s
mediasoup:Producer transportClosed() +25s
mediasoup:Producer transportClosed() +0ms
mediasoup:Transport close() +0ms
mediasoup:Channel request() [method:transport.close, id:14] +0ms
mediaserver:INFO:./Logger last Peer in the room left, closing the room [roomId:13rf34] +25s
mediasoup:Router close() +25s
mediasoup:Channel request() [method:router.close, id:15] +0ms
mediasoup:RtpObserver routerClosed() +25s
mediasoup:Channel request succeeded [method:transport.close, id:13] +2ms
mediasoup:Channel request succeeded [method:transport.close, id:14] +0ms
mediasoup:Channel request succeeded [method:router.close, id:15] +0ms