BinaryDataPacket constructor

BinaryDataPacket(
  1. Buffer buffer,
  2. List<Field> fieldPackets
)

Implementation

BinaryDataPacket(Buffer buffer, List<Field> fieldPackets) {
  buffer.skip(1);
  var nulls =
      buffer.readList(((fieldPackets.length + 7 + 2) / 8).floor().toInt());
  log.fine('Nulls: $nulls');

  var shift = 2;
  var byte = 0;
  var nullMap = List<bool>.generate(fieldPackets.length, (index) {
    var mask = 1 << shift;
    final value = (nulls[byte] & mask) != 0;
    shift++;
    if (shift > 7) {
      shift = 0;
      byte++;
    }
    return value;
  });

  values = List<dynamic>.filled(fieldPackets.length, null);
  for (var i = 0; i < fieldPackets.length; i++) {
    log.fine('$i: ${fieldPackets[i].name}');
    if (nullMap[i]) {
      log.fine('Value: null');
      values![i] = null;
      continue;
    }
    var field = fieldPackets[i];
    values![i] = readField(field, buffer);
    fields[field.name!] = values![i];
  }
}