Peering

Peering / Blog

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:

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.

O painel de atalhos do Peering no iPhone mostrando atalhos do Visual Studio Code acima da imagem do Mac.
Um botão de atalho envia os mesmos eventos de tecla que um teclado enviaria, com os modificadores certos.

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.