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

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

      if (recvPacketTotal == 0) {
        final payload = recvPackets.takeBytes();
        _dispatchMessage(messageId: messageId, type: recvType, data: payload);
        recvState = 'ready';
        recvPacketId = 0;
        recvType = '';
        recvMessageId = -1;
      } else {
        recvPacketId += 1;
        recvState = 'processing';
      }
    } else {
      recvState = 'error';
      recvPacketId = 0;
    }
    return;
  }

  if (recvState != 'processing') {
    recvState = 'error';
    recvPacketId = 0;
    return;
  }

  if (messageId != recvMessageId) {
    recvState = 'error';
    recvPacketId = 0;
  }

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

  if (recvPacketTotal == recvPacketId) {
    final payload = recvPackets.takeBytes();
    _dispatchMessage(messageId: messageId, type: recvType, data: payload);
    recvState = 'ready';
    recvPacketId = 0;
    recvType = '';
    recvMessageId = -1;
    return;
  }

  recvPacketId += 1;
}