reconnect method

Future<bool> reconnect()

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