encodeMessageV1 method

Uint8List encodeMessageV1(
  1. int code,
  2. dynamic data
)

Implementation

Uint8List encodeMessageV1(int code, dynamic data) {
  Uint8List dataBytes;
  int dataOffset = 0;
  if (data is String) {
    dataBytes = Uint8List.fromList(data.codeUnits);
  } else if (data is int) {
    dataBytes = Uint8List(4);
    dataBytes.buffer.asByteData().setInt32(0, data, Endian.little);
  } else if (data is List<int>) {
    dataBytes = Uint8List(data.length*4);
    for(int i = 0; i < data.length; i++){
      dataBytes.buffer.asByteData().setInt32(dataOffset, data[i], Endian.little);
      dataOffset+= 4;
    }
  }else {
    throw ArgumentError('Unsupported data type');
  }

  int dataLength = dataBytes.length;
  final bufferSize = dataLength + 6;  // Add length for start byte, message type, length, code, and checksum
  final buffer = Uint8List(bufferSize);

  buffer[0] = 36; // Start byte '$'
  buffer[1] = 77; // Message type 'M'
  buffer[2] = 60; // '<'
  buffer[3] = dataLength;
  buffer[4] = code;

  var checksum = buffer[3] ^ buffer[4];
  buffer.setRange(5, 5 + dataLength, dataBytes);
  for (int i = 5; i < 5 + dataLength; i++) {
    checksum ^= buffer[i];
  }

  buffer[bufferSize - 1] = checksum;  // Set the checksum at the end of the buffer.

  return buffer;
}