Mensagens

Mensagens em comms são dados binários pacotes, serializados usando protocol buffersarrow-up-right. Eles transportam chat de texto e voz, atualizações posicionais, alterações de perfil e outras interações em tempo real.

circle-info

Você pode ver o protocolo de comms em ação e experimentá-lo usando o código aberto Comms Stationarrow-up-right.

Todas as definições de mensagem estão disponíveis em repositório do protocoloarrow-up-right, e cada tipo de mensagem abaixo tem um link para sua declaração.

Pacote ↗ sourcearrow-up-right

O Pacote estrutura é o contêiner para todas as mensagens.

Campo
Tipo
Valor

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 ↗ sourcearrow-up-right

Envia uma mensagem de chat de texto para outros clientes.

Campo
Tipo
Valor

message

string

Texto da mensagem

timestamp

double

Timestamp UTC do remetente


Voice ↗ sourcearrow-up-right

Envia uma amostra de voz codificada para outros clientes.

Campo
Tipo
Valor

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 ↗ sourcearrow-up-right

Atualiza outros clientes sobre a posição e orientação de um avatar.

Campo
Tipo
Valor

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.

circle-info

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 LiveKitarrow-up-right) 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.

spinner

AnnounceProfileVersion ↗ sourcearrow-up-right

Sinaliza outros clientes que há um entidade de perfilarrow-up-right que eles podem solicitar.

Campo
Tipo
Valor

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 ↗ sourcearrow-up-right

Solicita um perfil de uma versão especificada de um par em particular.

Campo
Tipo
Valor

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 ↗ sourcearrow-up-right

Envia um perfil em resposta a um ProfileRequest.

Campo
Tipo
Valor

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 perfilarrow-up-right.

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