Steady as a wire, even on flaky Wi-Fi.
Wi-Fi is a hostile place. Microwaves, neighbors, dropped beacons, roaming events. Dish is built to ride out every one of them without yanking you out of your game.
Heartbeats
Both Dish and Satellite fire a small heartbeat packet every 2 seconds even when no buttons are being pressed. Two reasons:
- Liveness. Each side knows within a few seconds if the other has gone dark. Way snappier than any TCP keepalive timeout.
- Wi-Fi power-save bypass. Some phones throttle outbound packets when the screen sits still. A regular heartbeat keeps the radio awake, so when you finally hit a button there's no wake-up delay.
Automatic reconnect
Satellite reaps a connection after five missed heartbeats in a row, i.e. roughly 10 seconds of silence. Long before that, Dish starts a lightweight rejoin loop against the cached session key. No PIN re-entry needed. The pairing key persists across reboots and across the rejoin.
Critically, the virtual Xbox 360 or DualShock 4 controller stays plugged in on the gaming PC during the dropout. Most games won't eject the player. From the game's perspective the pad just sat still for a moment.
Roaming and multi-AP networks
On a mesh network, your phone might roam from one AP to another mid-match. The source IP changes, the old NAT mapping quietly resets. Dish spots the new source IP on the next packet and Satellite re-validates the session against the encrypted token. Usually with no visible glitch in-game.
Out-of-order and duplicate packets
Wi-Fi can deliver packets out of order on busy networks. Satellite's receiver tracks the highest counter it has accepted on each connection and drops anything stale. Newer packets always win, older packets are discarded silently. You never feel a stick snap back.
What happens during a real outage
If your Wi-Fi actually disappears for more than ten seconds, say a router reboot, Satellite reaps the connection and unplugs the virtual pad cleanly. The instant connectivity comes back, Dish auto-discovers Satellite again via mDNS and re-establishes against the saved key. Sticks centre, the pad re-appears, and the rest is up to the game.
No panicked unpairing. No "please re-add your gamepad" dialog. No re-typing a PIN.
Display sleep stays off while you play
Dish for Android holds a wake lock plus the connectedDevice foreground service required by Android, so the OS sees a connected gaming session and never decides to dim out on you mid-fight. Other Dish platforms in development use the equivalent power-assertion API (IOKit on macOS, the freedesktop ScreenSaver D-Bus inhibitor on Linux, SetThreadExecutionState on Windows).
Multi-controller per session
Couch co-op night? Up to 16 controllers per Satellite session, with independent virtual pads, encryption state, motion streams, and rumble routes. One player dropping out doesn't drag the others down. A single phone can drive several controllers against the same Satellite if you really want to.
Battery life
The hot path is a few lines of code. Dish for Android idles near zero CPU between input events. Heartbeats are the only ongoing work, and a tiny UDP packet every 2 seconds is basically free on a modern radio.
In our own testing, Dish for Android pulls noticeably less battery than a Bluetooth audio call.