ModeratorCapsule.fromBinary constructor

ModeratorCapsule.fromBinary(
  1. Uint8List data
)

Implementation

factory ModeratorCapsule.fromBinary(Uint8List data) {
  var bdata = new ByteData.view(data.buffer);
  data.buffer.asUint8List().toList();
  int dataLength = bdata.getUint32(0);
  if (dataLength != data.lengthInBytes) {
    return ModeratorCapsule(
        Uint8List(0), Uint8List(0), Uint8List(0), Uint8List(0), Uint8List(0));
  }
  var wi = 6; //skipping tangloid
  Uint8List _tangle = Uint8List(0); //MUST have key to talk to moderator
  Uint8List _katamari =
      Uint8List(dataLength); //currently OPTIONAL key for your requests
  Uint8List _threadEntries =
      Uint8List(10065536); //single thread entries with keys
  Uint8List _groupEntries =
      Uint8List(10065536); //single group entries with keys
  Uint8List _xxWants = Uint8List(8089); //single group entries with keys
  Uint8List _xxData =
      Uint8List(data.buffer.lengthInBytes); //single group entries with keys

  //tangle is a must
  /*int tadataLength = 0;
  if (bdata.getInt8(wi) == capsuleFieldType.empty) {
    wi++;
  } else {
    wi++;
    tadataLength = bdata.getInt16(wi);
    wi = wi + 2;
    for (int i = 0; i < tadataLength; i++) {
      _tangle.add(data[wi + i]);
    }
  }*/
  //katamari

  print(bdata.lengthInBytes.toString());
  int kdataLength = 0;
  if (bdata.getUint8(wi) == capsuleFieldType.empty.index) {
    wi++;
  } else {
    wi++;
    kdataLength = bdata.getUint16(wi);
    wi = wi + 2;
    var moo = wi + kdataLength;
    //print(moo);
    //print(bdata.lengthInBytes);
    try {
      for (int i = 0; i < kdataLength; i++) {
        //_katamari.add(data[wi + i]);
        _katamari[i] = bdata.getUint8(wi + i);
      }
    } catch (e) {
      print('missing byte');
      print(moo);
      print(bdata.lengthInBytes);
    }
    wi += kdataLength;
  }
  //threads 5
  var tdataLength = 0;
  if (bdata.getUint8(wi) == capsuleFieldType.empty.index) {
    wi++;
  } else {
    wi++;
    tdataLength = bdata.getUint16(wi);
    if (tdataLength > bdata.lengthInBytes) {
      print('trap');
    }
    if (tdataLength > _threadEntries.lengthInBytes) {
      print('trap');
    }
    wi = wi + 2;
    for (int i = 0; i < tdataLength; i++) {
      _threadEntries[i] = bdata.getUint8(wi + i);
      //_threadEntries.add(data[wi + i]);
    }
    wi += tdataLength;
  }
  //groups 6
  if (bdata.getUint8(wi) == capsuleFieldType.empty.index) {
    wi++;
  } else {
    wi++;
    int xdataLength = bdata.getUint16(wi);
    wi = wi + 2;
    for (int i = 0; i < xdataLength; i++) {
      _groupEntries[i] = bdata.getUint8(wi + i);
    }
    wi += xdataLength;
  }
  //XXWANTS 7
  int xwdataLength = 0;
  if (wi + 8 > bdata.lengthInBytes) {
    return ModeratorCapsule(
        kdataLength != 0 ? _katamari.sublist(0, kdataLength) : Uint8List(0),
        _threadEntries.sublist(0, tdataLength),
        Uint8List(0),
        Uint8List(0),
        Uint8List(0));
  }
  if (bdata.getUint8(wi) == capsuleFieldType.empty.index) {
    wi++;
  } else {
    wi++;
    xwdataLength = bdata.getUint16(wi);
    wi = wi + 2;
    for (int i = 0; i < xwdataLength; i++) {
      _xxWants[i] = bdata.getUint8(wi + i);
    }
    wi += xwdataLength;
  }
  int xdataLength = 0;
  if (bdata.getUint8(wi) == capsuleFieldType.empty.index) {
    wi++;
  } else {
    wi++;
    xdataLength = bdata.getUint32(wi);
    wi = wi + 4;
    for (int i = 0; i < xdataLength; i++) {
      _xxData[i] = bdata.getUint8(wi + i);
    }
    wi += xdataLength;
  }

  return ModeratorCapsule(
      kdataLength != 0 ? _katamari.sublist(0, kdataLength) : Uint8List(0),
      _threadEntries.sublist(0, tdataLength),
      Uint8List(0),
      _xxWants.sublist(0, xwdataLength),
      _xxData.sublist(0, xdataLength));
}