decode method

  1. @override
Future<MndpMessage> decode(
  1. Uint8List data
)
override

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