send method

  1. @override
void send(
  1. AbstractMessage message
)
override

Implementation

@override
void send(AbstractMessage message) {
  if (message is Goodbye) {
    _goodbyeSent = true;
  }
  final fragments = _handshakeCompleter.isCompleted
      ? _serializer.serializeFragments(message)
      : null;
  Uint8List? fragmentedPayload;
  if (fragments != null) {
    var payloadLength = 0;
    for (final fragment in fragments) {
      payloadLength += fragment.length;
    }
    if (payloadLength >= _segmentedSendThreshold) {
      _send0(
        SocketHelper.buildMessageHeader(
          SocketHelper.messageWamp,
          payloadLength,
          isUpgradedProtocol,
        ),
      );
      for (final fragment in fragments) {
        if (fragment.isNotEmpty) {
          _send0(fragment);
        }
      }
      return;
    }
    final builder = BytesBuilder(copy: false);
    for (final fragment in fragments) {
      builder.add(fragment);
    }
    fragmentedPayload = builder.takeBytes();
  }
  var serializedMessage = fragmentedPayload ?? _serializer.serialize(message);
  if (serializedMessage is String) {
    serializedMessage = utf8.encoder.convert(serializedMessage);
  }
  final frame = _buildWampFrame(serializedMessage as List<int>);
  if (!_handshakeCompleter.isCompleted) {
    if (_outboundBuffer!.isEmpty) {
      _handshakeCompleter.future.then((aVoid) {
        _send0(_outboundBuffer!);
        _outboundBuffer = null;
      });
    }
    _outboundBuffer!.addAll(frame);
  } else {
    _send0(frame);
  }
}