reconnect method
Implementation
Future<bool> reconnect() async {
try {
if (!await connect()) return false;
try {
var toBeRestored = <DistributedResource>[];
_suspendedResources.forEach((key, value) {
var r = value.target;
if (r != null) toBeRestored.add(r);
});
for (var r in toBeRestored) {
var link = DC.stringToBytes(r.distributedResourceLink ?? "");
//print("Restoring " + (r.distributedResourceLink ?? ""));
try {
var ar = await (sendRequest(IIPPacketAction.QueryLink)
..addUint16(link.length)
..addDC(link))
.done();
var dataType = ar?[0] as TransmissionType;
var data = ar?[1] as DC;
if (dataType.identifier ==
TransmissionTypeIdentifier.ResourceList) {
// remove from suspended.
_suspendedResources.remove(r.distributedResourceInstanceId);
// parse them as int
var id = data.getUint32(8);
// id changed ?
if (id != r.distributedResourceInstanceId)
r.distributedResourceInstanceId = id;
_neededResources[id] = r;
await fetch(id, null);
}
} catch (ex) {
if (ex is AsyncException &&
ex.code == ExceptionCode.ResourceNotFound) {
// skip this resource
} else {
break;
}
}
}
} catch (ex) {
print(ex);
}
} catch (ex) {
return false;
}
return true;
}