encodeWebSocketFrame function

Uint8List encodeWebSocketFrame(
  1. WebSocketOpcode opcode,
  2. List<int> payload, {
  3. bool fin = true,
})

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