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