processFrame10 method
Implementation
void processFrame10(UdpAddress? sourceAddress, Uint8List frame) {
Transaction transaction = Transaction.fromBinary(frame, 0, frame.length);
List<String> transactionsToRemove = [];
for (var trKey in incomingTransactions.keys) {
Transaction? incomingTransaction = incomingTransactions[trKey];
if (incomingTransaction != null) {
var diff = DateTime.now().difference(incomingTransaction.dtBegin);
if (diff.inSeconds > 10) {
transactionsToRemove.add(trKey);
}
}
}
for (String trKey in transactionsToRemove) {
incomingTransactions.remove(trKey);
}
Transaction incomingTransaction =
Transaction(0, "", "", 0, 0, 0, 0, Uint8List(0));
String incomingTransactionCode =
sourceAddress.toString() + "-" + transaction.transactionId.toString();
if (incomingTransactions.containsKey(incomingTransactionCode)) {
incomingTransaction = incomingTransactions[incomingTransactionCode]!;
} else {
incomingTransaction = Transaction(0, "", "", 0, 0, 0, 0, Uint8List(0));
incomingTransaction.frameType = transaction.frameType;
incomingTransaction.transactionId = transaction.frameType;
incomingTransaction.sessionId = transaction.frameType;
incomingTransaction.offset = 0;
incomingTransaction.totalSize = transaction.totalSize;
incomingTransaction.dtBegin = DateTime.now();
incomingTransaction.srcAddress = transaction.srcAddress;
incomingTransaction.destAddress = transaction.destAddress;
}
if (incomingTransaction.data.length != incomingTransaction.totalSize) {
incomingTransaction.data = Uint8List(incomingTransaction.totalSize);
}
for (int i = 0; i < transaction.data.length; i++) {
int targetIndex = transaction.offset + i;
if (targetIndex < incomingTransaction.data.length) {
incomingTransaction.data[targetIndex] = transaction.data[i];
}
}
incomingTransaction.receivedDataLen += transaction.data.length;
if (incomingTransaction.receivedDataLen < incomingTransaction.totalSize) {
return;
}
incomingTransactions.remove(incomingTransactionCode);
{
// TODO: process Call
}
}