Mensajes

Los mensajes en comms son datos binarios paquetes, serializados usando protocol buffersarrow-up-right. Transportan chat de texto y voz, actualizaciones posicionales, cambios de perfil y otras interacciones en tiempo real.

circle-info

Puedes ver el protocolo de comms en acción y experimentar con él usando el Comms Stationarrow-up-right.

Todas las definiciones de mensajes están disponibles en el repositorio del protocoloarrow-up-right, y cada tipo de mensaje abajo tiene un enlace a su declaración.

El ↗ fuentearrow-up-right

El El estructura de paquete es el contenedor para todos los mensajes.

Campo
Tipo
Valor

message

enum

Uno de Chat, Voice, position, AnnounceProfileVersion, ProfileRequest, ProfileResponse, o Scene.

Chat de Texto y Voz

Los clientes chatean transmitiendo mensajes de texto y clips de audio a todos los pares conectados (usualmente jugadores en la misma isla).

Solo dos El tipos están involucrados, uno para cada caso de uso. En circunstancias típicas, los clientes transmiten estos mensajes a todos los demás clientes en su isla, que es el grupo de jugadores cercanos con los que pueden interactuar.


Chat ↗ fuentearrow-up-right

Envía un mensaje de chat de texto a otros clientes.

Campo
Tipo
Valor

message

string

Texto del mensaje

timestamp

double

Marca de tiempo UTC del remitente


Voice ↗ fuentearrow-up-right

Envía una muestra de voz codificada a otros clientes.

Campo
Tipo
Valor

encoded_samples

bytes

Datos de audio codificados

codec

enum

Solo VC_OPUS (no se admiten otros codecs por ahora)

index

uint32

Un contador incremental establecido por el remitente

El codec el campo es un enum valor. No se admiten codecs personalizados.

Movimiento

Los clientes que controlan avatares envían y reciben actualizaciones posicionales dentro de su isla, para sincronizar movimiento y postura entre jugadores.


position ↗ fuentearrow-up-right

Actualiza a otros clientes sobre la posición y orientación de un avatar.

Campo
Tipo
Valor

position_x position_y position_z

float

Posición del avatar en el mapa del mundo

rotation_x rotation_y rotation_z rotation_w

float

Cuaternión de rotación del avatar

index

uint32

Un contador incremental establecido por el remitente

Normalmente los clientes envían position actualizaciones con baja frecuencia (como una vez cada 1 o 2 segundos), y cambian a alta frecuencia (varias veces por segundo) cuando se mueven o interactúan.

circle-info

Al enviar actualizaciones posicionales, la velocidad suele ser mejor que la fiabilidad. El rendimiento percibido es mejor cuando la entrega es más rápida, incluso si un position mensaje se pierde ocasionalmente o llega desordenado. Algunos transportes (por ejemplo, LiveKitarrow-up-right) pueden cambiar entre modos rápidos y fiables por mensaje.

Se recomiendan las transmisiones de baja frecuencia como una solución simple para entregar actualizaciones a clientes que momentáneamente perdieron conectividad o no alcanzaron a recibir un mensaje mientras se unían a la isla.

El index el campo es un contador incremental, establecido por el remitente para que los receptores puedan ordenar las actualizaciones que llegan fuera de orden.

Compartir Perfil

Los clientes dentro de una isla pueden solicitar la información de avatar de otros jugadores, con el fin de renderizar sus avatares, mostrar sus nombres e imágenes, etc.

Como los cambios de perfil son raros (comparados con las actualizaciones posicionales, por ejemplo), el sistema está diseñado para simplificar la tarea de mantener una caché local de perfiles, y solo obtener perfiles cuando sea necesario.

Hay 3 El tipos involucrados: un ProfileRequest/ProfileResponse par usado por los clientes para compartir perfiles bajo demanda, y el AnnounceProfileVersion mensaje para decir a los pares cuál es la última versión, para que puedan decidir si solicitarla.

Normalmente los clientes transmiten AnnounceProfileVersion mensajes periódicamente, además de inmediatamente cuando su perfil cambia.

spinner

AnnounceProfileVersion ↗ fuentearrow-up-right

Señala a otros clientes que hay un entidad de perfilarrow-up-right que pueden solicitar.

Campo
Tipo
Valor

profile_version

uint32

Un número de versión incrementado con cada modificación.

Los receptores que almacenan en caché perfiles pueden usar el profile_version número para decidir si su copia local está actualizada, o si necesitan enviar un ProfileRequest.


ProfileRequest ↗ fuentearrow-up-right

Solicita un perfil de una versión especificada a un par en particular.

Campo
Tipo
Valor

address

string

La dirección identificadora del perfil.

profile_version

uint32

La versión de perfil deseada.

Los receptores pueden responder con ProfileResponse mensajes para proporcionar el perfil solicitado.


ProfileResponse ↗ fuentearrow-up-right

Envía un perfil en respuesta a un ProfileRequest.

Campo
Tipo
Valor

serialized_profile

string

Entidad de perfil serializada en JSON.

base_url

uint32

URL base para un endpoint de sistema de archivos, recomendada por el remitente.

El serialized_profile el campo contiene la serialización JSON de una entidad de perfilarrow-up-right.

Si el remitente quiere recomendar un servidor de contenido para descargar entidades referenciadas en su perfil (como wearables), puede establecer el campo base_url como una sugerencia. Los clientes son libres de usar o ignorar esta URL.

Última actualización