Skip to content

Keep reconnect and PiP recovery bounded across transient successes - #121

Open
alantangok wants to merge 1 commit into
hugeBlack:mainfrom
alantangok:agent/restore-recovery-pr
Open

alantangok wants to merge 1 commit into
hugeBlack:mainfrom
alantangok:agent/restore-recovery-pr

Conversation

@alantangok

Copy link
Copy Markdown
Contributor

After a background restore, a brief PARSEC_OK or display-layer .rendering sample clears the retry counter. If it fails again immediately, reconnect/PiP recovery can keep restarting and expose flashing frames.

Require five healthy seconds before renewing the three-attempt budget. Keep the existing retry delays and connection/approval timeouts, hold an opaque overlay during reconnect, and reject SDK network failure as successful recovery. PiP retries also respect backoff and stay stopped after exhaustion.

This builds on #108 and #109, using current main with its existing renderer, input and settings code.

Validation:

  • python3 scripts/check_stream_recovery.py: 32 policy and production-method checks pass. The same harness produced eight behavioral failures against the original main methods. It uses fake SDK/display-layer dependencies and a controlled clock, and now runs in the existing build workflow.
  • Unsigned Release iphoneos build passes with Xcode 26.6 and the pinned SDK submodule.
  • Device confirmation covers the related fix in the older 1.3.0 build 226. This main/Metal port has not yet been tested on a physical iPad.

A brief SDK OK or display-layer rendering status currently clears the retry
counter, allowing repeated failure/success cycles to restart recovery forever.
Retain the three-attempt budget until five continuous healthy seconds, keep
the existing retry delays and timeouts, and hold an opaque recovery overlay.
Do not accept the SDK network-failure flag as successful recovery.

Exercise the production poll and PiP recovery methods with fake dependencies
and a controlled clock, and run these regressions in the existing build CI.
The baseline fails eight behavior checks; the fix passes all 32 checks and
the unsigned Release iphoneos build with Xcode 26.6.

Device confirmation covers the older stable candidate. This current-main
port still needs physical-device restore/PiP validation.
@alantangok

alantangok commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor Author

I use OpenParsec daily on both my iPhone and iPad now, after often being unable to connect with AnyDesk. My goal is to help make this open-source remote desktop client as stable and easy to use as possible, for everyday use and gaming. I'd also like to learn from the UX of AnyDesk, Microsoft Remote Desktop, RustDesk, Sunshine/Moonlight and other remote desktop and cloud gaming tools.

@alantangok

Copy link
Copy Markdown
Contributor Author

Another idea I'd love to explore is a Parallels Coherence-style mode on iPad, where remote apps could appear as separate windows instead of showing the whole remote desktop. I'm not sure whether the Parsec SDK can support this, but it could be an interesting direction to investigate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant