encodeWebSocketFrame function
Encodes a server frame, which is never masked (RFC 6455 5.1).
Implementation
Uint8List encodeWebSocketFrame(
WebSocketOpcode opcode,
List<int> payload, {
bool fin = true,
}) {
final length = payload.length;
final extra = length < 126
? 0
: length <= 0xffff
? 2
: 8;
final frame = Uint8List(2 + extra + length);
frame[0] = (fin ? 0x80 : 0) | opcode.code;
if (extra == 0) {
frame[1] = length;
} else if (extra == 2) {
frame[1] = 126;
frame[2] = length >> 8;
frame[3] = length & 0xff;
} else {
frame[1] = 127;
var n = length;
for (var i = 9; i >= 2; i--) {
frame[i] = n & 0xff;
n >>= 8;
}
}
frame.setRange(2 + extra, frame.length, payload);
return frame;
}