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