onDataReceived method

void onDataReceived(
  1. Uint8List dataPacket
)

Implementation

void onDataReceived(Uint8List dataPacket) {
  final data = dataPacket.buffer.asByteData();

  final messageId = data.getUint32(4).toInt() + (data.getUint32(0).toInt() << 32);
  final packet = data.getInt32(8);

  if (packet != recvPacketId) {
    recvState = "error";
    //debugPrint("received out of order packet got $packet expected $recvPacketId, total $recvPacketTotal message ID: $messageId");
  }

  if (packet == 0) {
    if (recvState == "ready" || recvState == "error") {
      recvPacketTotal = data.getInt32(12);
      recvMessageId = messageId;
      recvType = utf8.decode(dataPacket.sublist(16));
      //debugPrint("received packet $recvType");

      if (recvPacketTotal == 0) {
        try {
          handleMessage(messageId, recvType, recvPackets.takeBytes());
        } finally {
          //debugPrint("expecting packet reset to 0");
          recvState = "ready";
          recvPacketId = 0;
          recvType = "";
          recvMessageId = -1;
        }
      } else {
        recvPacketId += 1;
        //debugPrint("expecting packet $recvPacketId");
        recvState = "processing";
      }
    } else {
      recvState = "error";
      recvPacketId = 0;
      //debugPrint("received packet 0 in invalid state");
    }
  } else if (recvState != "processing") {
    recvState = "error";
    recvPacketId = 0;
    //debugPrint("received datapacket in invalid state");
  } else {
    if (messageId != recvMessageId) {
      recvState = "error";
      recvPacketId = 0;
      //debugPrint("received packet from incorrect message");
    }

    recvPackets.add(dataPacket.sublist(12));

    if (recvPacketTotal == recvPacketId) {
      try {
        handleMessage(messageId, recvType, recvPackets.takeBytes());
      } finally {
        recvState = "ready";
        recvPacketId = 0;
        recvType = "";
        recvMessageId = -1;
      }
    } else {
      recvPacketId += 1;
    }
  }
}