doClose method
Closes the transport.
@api private
Implementation
@override
void doClose([dynamic Function()? fn]) {
_logger.fine('closing');
var self = this;
Timer? closeTimeoutTimer;
if (dataReq != null) {
_logger.fine('aborting ongoing data request');
dataReq = null;
}
var onClose = () {
if (closeTimeoutTimer != null) closeTimeoutTimer.cancel();
if (fn != null) fn();
self.onClose();
};
if (writable == true) {
_logger.fine('transport writable - closing right away');
send([
{'type': 'close'}
]);
onClose();
} else if (discarded) {
_logger.fine('transport discarded - closing right away');
onClose();
} else {
_logger.fine('transport not writable - buffering orderly close');
shouldClose = onClose;
closeTimeoutTimer = Timer(Duration(milliseconds: closeTimeout), onClose);
}
}