sendLoop method

Future<void> sendLoop()

Implementation

Future<void> sendLoop() async {
  while (true) {
    await _sendBufferedData.future;

    if (!_executing) {
      if (_transportResult != null) {
        _transportResult!.completeError(Exception('Connection stopped.'));
      }

      break;
    }

    _sendBufferedData = Completer();

    final transportResult = _transportResult;
    _transportResult = null;

    if (_buffer.isNotEmpty) {
      final data = (_buffer[0] is String)
          ? _buffer.join('')
          : TransportSendQueue._concatBuffers(_buffer as List<ByteBuffer?>);

      _buffer.clear();

      try {
        await transport!.send(data);
        transportResult!.complete();
      } catch (error) {
        transportResult!.completeError(error);
      }
    }
  }
}