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