doClose method

  1. @override
void doClose([
  1. dynamic fn()?
])
override

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);
  }
}