parseMessage static method
Parse a complete message from bytes (header + payload)
Implementation
static WireMessage parseMessage(Uint8List messageBytes) {
if (messageBytes.length < messageHeaderSize) {
throw WireException('Message too short for header');
}
// Parse header
final header = MessageHeader.deserialize(messageBytes);
// Validate payload length
if (messageBytes.length < messageHeaderSize + header.payloadLength) {
throw WireException(
'Message shorter than expected: ${messageBytes.length} < ${messageHeaderSize + header.payloadLength}',
header.command,
);
}
// Extract and validate payload
final payload = messageBytes.sublist(
messageHeaderSize,
messageHeaderSize + header.payloadLength,
);
// Verify checksum
final expectedChecksum = _calculateChecksum(payload);
if (!_checksumsEqual(header.checksum, expectedChecksum)) {
final expectedHex = expectedChecksum.map((b) => b.toRadixString(16).padLeft(2, '0')).join('');
final actualHex = header.checksum.map((b) => b.toRadixString(16).padLeft(2, '0')).join('');
throw WireException(
'Invalid checksum: expected 0x$expectedHex, got 0x$actualHex',
header.command,
);
}
// Deserialize the message
return deserializeMessage(
header.command,
payload,
70001, // Default protocol version
MessageEncoding.base,
);
}