release method

Implementation

Future<CuppsCommandResponse> release() async {
  try {
    if (isConnected) {
      if (locked) {
        DeviceUnlockRequest req = DeviceUnlockRequest(messageID: currentMessageID);
        String unlockResXML = await send(xml: req.toXML());
        DeviceUnlockResponse unlockRes = DeviceUnlockResponse.fromXML(unlockResXML);
        if (unlockRes.result.toLowerCase() == "ok") {
          locked = false;
          DeviceReleaseRequest req = DeviceReleaseRequest(messageID: currentMessageID);
          String deviceReleaseResXML = await send(xml: req.toXML());
          DeviceReleaseResponse deviceReleaseRes = DeviceReleaseResponse.fromXML(deviceReleaseResXML);
          if (deviceReleaseRes.result.toLowerCase() == "ok") {
            socketService.disableRetry();
            initialized = false;
            locked = false;
            modded = false;
            await socketService.disconnect(disableRetry: true).timeout(const Duration(seconds: 12), onTimeout: () {
              onDeviceDisconnect();
            });

            return CuppsCommandResponse(status: true, msg: "Device:$deviceName Released Successfully");
          } else {
            return CuppsCommandResponse(status: false, msg: deviceReleaseRes.result);
          }
        } else {
          socketService.disableRetry();
          initialized = false;
          locked = false;
          modded = false;
          await socketService.disconnect(disableRetry: true).timeout(const Duration(seconds: 12), onTimeout: () {
            onDeviceDisconnect();
          });

          return CuppsCommandResponse(status: true, msg: unlockRes.result);
        }
      } else {
        log("Not Locked");
        DeviceReleaseRequest req = DeviceReleaseRequest(messageID: currentMessageID);
        String deviceReleaseResXML = await send(xml: req.toXML());
        log(deviceReleaseResXML);
        DeviceReleaseResponse deviceReleaseRes = DeviceReleaseResponse.fromXML(deviceReleaseResXML);
        if (deviceReleaseRes.result.toLowerCase() == "ok") {
          socketService.disableRetry();
          initialized = false;
          locked = false;
          modded = false;
          await socketService.disconnect(disableRetry: true).timeout(const Duration(seconds: 12), onTimeout: () {
            onDeviceDisconnect();
          });
          return CuppsCommandResponse(status: true, msg: "Device :$deviceName Released Successfully");
        } else {
          socketService.disableRetry();
          initialized = false;
          locked = false;
          modded = false;
          await socketService.disconnect(disableRetry: true).timeout(const Duration(seconds: 12), onTimeout: () {
            onDeviceDisconnect();
          });
          return CuppsCommandResponse(status: true, msg: deviceReleaseRes.result);
        }
      }
    } else {
      await socketService.disconnect(disableRetry: true).timeout(const Duration(seconds: 12), onTimeout: () {
        onDeviceDisconnect();
      });
      initialized = false;
      locked = false;
      modded = false;
      return CuppsCommandResponse(status: true, msg: "Device :$deviceName is not Acquired");
    }
  } catch (e) {
    socketService.disableRetry();
    return CuppsCommandResponse(status: true, msg: "Device $deviceName release Exception: $e");
  }
}