decode method
Implementation
@override
Future<MndpMessage> decode(Uint8List data) async {
var msg = MndpMessage();
var buffer = ByteData.sublistView(data);
msg.type = buffer.getUint8(0);
msg.ttl = buffer.getUint8(1);
msg.sequence = buffer.getUint16(2);
int offset = 4;
while (offset < data.length) {
int tlvType = buffer.getUint16(offset);
int tlvLength = buffer.getUint16(offset + 2);
offset += 4;
var tlvValue = data.sublist(offset, offset + tlvLength);
offset += tlvLength;
switch (tlvType) {
case tlvTypeMacAddress:
msg.macAddress = _bytesToMACAddress(tlvValue);
break;
case tlvTypeIdentity:
msg.identity = utf8.decode(tlvValue);
break;
case tlvTypeVersion:
msg.version = utf8.decode(tlvValue);
break;
case tlvTypePlatform:
msg.platform = utf8.decode(tlvValue);
break;
case tlvTypeSoftwareId:
msg.softwareId = utf8.decode(tlvValue);
break;
case tlvTypeBoardName:
msg.boardName = utf8.decode(tlvValue);
break;
case tlvTypeInterfaceName:
msg.interfaceName = utf8.decode(tlvValue);
break;
case tlvTypeUptime:
msg.uptime = Duration(seconds: _bytesToInt(tlvValue));
break;
case tlvTypeUnpack:
msg.unpack = tlvValue[0];
break;
case tlvTypeIPV6:
msg.unicastIpv6Address = _formatIpv6Address(tlvValue);
break;
case tlvTypeIPV4:
msg.unicastIpv4Address = _formatIpv4Address(tlvValue);
break;
}
}
msg.productInfo = await _productInfoProvider.find(msg.boardName ?? '');
return msg;
}