Mensagens
Mensagens em comms são dados binários pacotes, serializados usando protocol buffers. Eles transportam chat de texto e voz, atualizações posicionais, alterações de perfil e outras interações em tempo real.
Você pode ver o protocolo de comms em ação e experimentá-lo usando o código aberto Comms Station.
Todas as definições de mensagem estão disponíveis em repositório do protocolo, e cada tipo de mensagem abaixo tem um link para sua declaração.
Pacote ↗ source
O Pacote estrutura é o contêiner para todas as mensagens.
message
enum
Um de Chat, Voice, position, AnnounceProfileVersion,
ProfileRequest, ProfileResponse, ou Scene.
Chat de Texto e Voz
Os clientes conversam transmitindo mensagens de texto e clipes de áudio para todos os pares conectados (normalmente jogadores na mesma ilha).
Apenas dois Pacote tipos estão envolvidos, um para cada caso de uso. Em circunstâncias típicas, os clientes transmitem essas mensagens para todos os outros clientes na sua ilha, que é o grupo de jogadores próximos com os quais podem interagir.
Chat ↗ source
Envia uma mensagem de chat de texto para outros clientes.
message
string
Texto da mensagem
timestamp
double
Timestamp UTC do remetente
Voice ↗ source
Envia uma amostra de voz codificada para outros clientes.
encoded_samples
bytes
Dados de áudio codificados
codec
enum
Apenas VC_OPUS (nenhum outro codec é suportado por enquanto)
index
uint32
Um contador incremental definido pelo remetente
O codec campo é um enum valor. Codecs personalizados não são suportados.
Movimento
Clientes que controlam avatares enviam e recebem atualizações posicionais dentro da sua ilha, para sincronizar movimento e postura entre os jogadores.
position ↗ source
Atualiza outros clientes sobre a posição e orientação de um avatar.
position_x
position_y
position_z
float
Posição do avatar no mapa mundial
rotation_x
rotation_y
rotation_z
rotation_w
float
Quaternion de rotação do avatar
index
uint32
Um contador incremental definido pelo remetente
Os clientes normalmente enviam position atualizações com baixa frequência (como uma vez a cada 1 ou 2 segundos), e mudam para alta frequência (várias vezes por segundo) quando se movem ou interagem.
Ao enviar atualizações posicionais, velocidade geralmente é mais importante que confiabilidade. A experiência percebida é melhor quando a entrega é mais rápida, mesmo se uma position mensagem ocasionalmente for perdida ou reordenada. Alguns transportes (por exemplo LiveKit) podem alternar entre modos rápido e confiável por mensagem.
As transmissões de baixa frequência são recomendadas como uma solução simples para entregar atualizações a clientes que momentaneamente perderam conectividade ou não conseguiram captar uma mensagem enquanto entravam na ilha.
O index campo é um contador incremental, definido pelo remetente para que os receptores possam ordenar atualizações que chegam fora de ordem.
Compartilhamento de Perfil
Clientes dentro de uma ilha podem solicitar as informações de avatar de outros jogadores, a fim de renderizar seus avatares, exibir seus nomes e imagens, etc.
Como alterações de perfil são raras (comparadas com atualizações posicionais, por exemplo), o sistema é projetado para simplificar a tarefa de manter um cache local de perfis, e somente buscar perfis quando necessário.
Há 3 Pacote tipos envolvidos: um ProfileRequest/ProfileResponse par usado pelos clientes para compartilhar perfis sob demanda, e a AnnounceProfileVersion mensagem para informar aos pares qual é a versão mais recente, para que possam decidir se devem solicitá-la.
Os clientes normalmente transmitem AnnounceProfileVersion mensagens periodicamente, além de imediatamente quando seu perfil muda.
AnnounceProfileVersion ↗ source
Sinaliza outros clientes que há um entidade de perfil que eles podem solicitar.
profile_version
uint32
Um número de versão incrementado a cada modificação.
Receptores que fazem cache de perfis podem usar o número profile_version para decidir se sua cópia local está atualizada, ou se precisam enviar um ProfileRequest.
ProfileRequest ↗ source
Solicita um perfil de uma versão especificada de um par em particular.
address
string
O endereço identificador do perfil.
profile_version
uint32
A versão do perfil desejada.
Receptores podem responder com ProfileResponse mensagens para fornecer o perfil solicitado.
ProfileResponse ↗ source
Envia um perfil em resposta a um ProfileRequest.
serialized_profile
string
Entidade de perfil serializada em JSON.
base_url
uint32
URL base para um endpoint de sistema de arquivos, recomendado pelo remetente.
O serialized_profile campo contém a serialização JSON de uma entidade de perfil.
Se o remetente quiser recomendar um servidor de conteúdo para baixar entidades referenciadas em seu perfil (como wearables), ele pode definir o campo base_url como uma sugestão. Os clientes são livres para usar ou ignorar essa URL.
Atualizado