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