Cómo funciona

De una pulsación a un mando virtual.

No tienes que leer nada de esto para usar Dish. Simplemente funciona. Pero si quieres saber qué hace tu entrada entre tu pulgar y el juego, este es el viaje completo: entrada, cifrado, transporte, inyección y ruta de retorno.

  1. 1

    Pulsas un botón en Dish

    Quizá es un toque en el overlay táctil de Dish para Android. Quizá es un L1 de DualSense emparejado por Bluetooth a tu teléfono y puenteado por Dish. En cualquier caso, Dish captura el evento del SO en cuanto se dispara. No en el siguiente vsync, no en el siguiente frame. Ya.

  2. 2

    Dish construye un report XUSB de 12 bytes

    El estado del mando va al formato de hilo compacto de Satellite: dos bytes de botones, un byte por gatillo, dos bytes por eje del stick analógico. Doce bytes en total. Binariamente compatible con el report XINPUT de Windows, así que el receptor no traduce nada.

  3. 3

    Cifra el paquete

    Dish antepone un token de sesión de 4 bytes y un contador de 4 bytes, y luego sella la carga con ChaCha20-Poly1305 IETF usando la clave simétrica de 32 bytes que ambos extremos derivaron del intercambio X25519 al emparejar. El contador funciona como nonce y como defensa contra repetición; el token se autentica como AAD para que no se pueda manipular.

  4. 4

    Se envía por UDP

    Dish abre un socket UDP en el puerto 9876 y llama a sendto directamente desde el hilo de entrada. Sin cola, sin runtime asíncrono, sin ring buffer. El paquete se etiqueta con DSCP EF (Expedited Forwarding, 0xB8), así que cualquier router o AP con QoS en tu LAN lo adelanta al tráfico masivo.

  5. 5

    Satellite recibe y verifica

    En tu PC gaming Windows, Satellite está parado en su socket UDP en un hilo crítico esperando. En cuanto el paquete llega, se verifica el MAC, se descifra y se contrasta con el contador más alto que ya hayamos aceptado en esta conexión. Cualquier cosa rancia, falsificada o manipulada se descarta en silencio, así que tu juego nunca ve una entrada corrupta.

  6. 6

    Satellite inyecta un mando virtual

    Satellite entrega el report al driver kernel ViGEmBus con una sola llamada a DeviceIoControl. Eliges por mando si enchufar un Xbox 360 o un DualShock 4. El DS4 obtiene la superficie completa: movimiento, dedos del touchpad, lightbar y batería, todo reportado de vuelta al juego.

  7. 7

    El juego responde, y contesta

    El juego lee el nuevo estado del mando en su próxima encuesta de entrada, normalmente dentro de un frame a 60 fps. Cuando el juego escribe vibración de vuelta, o pinta el lightbar de un nuevo color, Satellite cifra y envía MSG_RUMBLE o MSG_LIGHTBAR de vuelta al Dish correcto, que activa la haptica y el LED en tu mano. Latencia total dedo-a-píxel: un puñado de milisegundos más lo que añada el frame time de tu monitor.

El emparejamiento ocurre una vez

La primera vez que un Dish se encuentra con un nuevo Satellite, pulsas "Generar PIN" en el menú de la bandeja de Satellite o en la UI web. Satellite muestra un código de 4 dígitos que vive durante 5 minutos. Dish envía su clave pública X25519 junto con ese PIN a https://<tu-pc>:9443/api/pair. Satellite verifica el PIN, calcula el secreto compartido, devuelve su clave pública y ambos lados cachean la clave simétrica resultante de 32 bytes. A partir de ahí, el mando se reconecta en silencio: sin PIN, sin UI, sin pensarlo.

"¿Y qué pasa con Sunshine y Moonlight?"

Sunshine y Moonlight siguen siendo el estándar de oro para transmitir vídeo desde tu PC gaming a otra pantalla, como tu tele, un teléfono o una Steam Deck. Incluyen reenvío de mando, pero asume que el mando y la pantalla viven en el mismo dispositivo. Dish maneja un modelo distinto:

Los nombres apuntan al mismo linaje. Mira por qué "Dish" y "Satellite".

Pruébalo tú mismo.

Cinco minutos desde la instalación hasta la primera entrada.

Descarga Dish