Como um toque no seu iPhone vira um clique no seu Mac
Enviar um clique é fácil. Enviar milhares deles por uma conexão ruim, em ordem, sem fazer o cursor atrasar, é onde o controle remoto fica interessante.
As posições são frações, não pixels
Quando você toca na imagem, o iPhone não envia "pixel 812, 640". Ele envia um ponto entre 0 e 1 em cada eixo, relativo à origem exibida. O Mac transforma isso em coordenadas reais da tela ou da janela que está capturando. É por isso que um toque cai no lugar certo, quer a imagem esteja ajustada à tela ou ampliada, na vertical ou na horizontal, em um painel Retina ou em uma tela virtual com o formato do iPhone. Nenhum dos lados precisa combinar uma resolução.
Nem toda mensagem é igual
A entrada viaja como pequenos comandos JSON pela conexão de controle criptografada, e o app trata cada tipo de um jeito:
- Os movimentos do mouse guardam só o último. Se três movimentos entrarem na fila enquanto a rede trava, os dois primeiros não valem nada. O mais novo os substitui, e os movimentos são limitados a cerca de 60 por segundo.
- As rolagens se somam. Dois eventos de rolagem que entram juntos na fila viram um evento com a soma, então nenhuma distância se perde.
- Cliques e teclas nunca são descartados nem reordenados. Um soltar do mouse que chegasse antes do seu pressionar seria um bug visível.
Essa pequena política responde pela maior parte da diferença entre um cursor que desliza e um que dá solavancos depois de um soluço. Também significa que uma conexão ruim se degrada em um ponteiro menos suave e nunca em uma ação errada.
As teclas são códigos de tecla do macOS
Um toque de tecla é um código de tecla virtual do macOS mais bits modificadores para shift, control, option e command. O app do Mac o converte em um evento de teclado real e o envia ao sistema, e é por isso que precisa da permissão de Acessibilidade. Os atalhos acompanham o app em uso: o painel acima mostra os comandos do editor que está na frente, não uma lista fixa.
Fazer as teclas se comportarem como um teclado físico tem armadilhas surpreendentes. Uma seta de verdade carrega duas flags extras, uma de função e uma de teclado numérico, que um evento sintético ingênuo deixa de fora. Sem elas, Control e seta para cima não faziam nada no Mac em vez de abrir o Mission Control, mesmo com o código de tecla certo tendo chegado. Agora o Peering define as duas flags, como um teclado de verdade.
Texto não é toque de tecla
Emoji, acentos e escritas não latinas não correspondem a códigos de tecla. Para eles, o iPhone envia os próprios caracteres como texto, e o Mac os digita. É por isso que o teclado funciona em qualquer idioma, e por que alguns atalhos do Mac não funcionam nesse modo. É uma troca que o app deixa você alternar nos Ajustes.
Mantendo a sincronia
O iPhone envia um ping ao Mac a cada segundo, e o Mac responde devolvendo o ping, o que serve também como leitura de latência ao vivo. Se o iPhone for para segundo plano, ele avisa antes, porque o iOS pode congelar um app sem fechar as suas conexões, e o Mac então para de enviar vídeo a ele até que volte. Uma sessão também pode ser definida como somente observação, caso em que o Mac ignora a entrada enquanto a imagem continua fluindo.
A outra direção desse ciclo é como a imagem chega ao iPhone. Juntas, elas decidem o quão responsivo o conjunto parece.
Perguntas
O Peering aceita emoji e teclados de outros idiomas?
Sim. O texto que não é toque de tecla é enviado como caracteres e digitado no Mac, então emoji e qualquer idioma funcionam. Os atalhos do Mac só são enviados no modo que envia códigos de tecla.
Por que o cursor continua suave em uma conexão fraca?
Os movimentos do mouse são agrupados para manter só a posição mais recente, e as rolagens são somadas. Cliques e teclas são sempre entregues em ordem.