For the complete documentation index, see llms.txt. This page is also available as Markdown.

WebSocket

O transporte websocket é um dos transportes de mensagens da ilha suportados pelo protocolo de comms do Decentraland. Os clientes devem usá-lo quando receberem uma connection string apropriada do realm de seu Archipelago service, ou se estiver indicado como um transporte fixo.

No contexto do transporte websocket, uma ilha é chamada de sala. Ambos os nomes indicam a mesma coisa: um grupo de jogadores próximos que trocam atualizações e chat.

As connection strings começam com o ws-room: prefixo, seguido por uma wss:// URI para a sala específica. Elas se parecem com isto:

ws-room:wss://comms.example.com/rooms/<room-id>

Na ausência de um protocolo explícito para a URI websocket, wss:// é assumido.

Conectando

O transporte usa o protocolo websocket regular sobre HTTPS. Os clientes podem abrir uma conexão usando qualquer implementação padrão à sua disposição.

Pacotes Websocket

Todas as mensagens do transporte websocket são serializadas usando a WsPacket estrutura. Elas implementam um conjunto de mensagens de conectividade e autenticação em nível de protocolo, além de um tipo contêiner para mensagens de cliente.

O WsPacket estrutura não deve ser confundida com a mensagem [Packet][Packet]. É uma camada adicional de encapsulamento específica do transporte websocket. As mensagens reais de comms estão contidas no WsPeerUpdate tipo.

Campo
Tipo
Valor

message

enum

Um de WsIdentification, WsChallengeRequired, WsSignedChallenge, WsWelcome, WsPeerJoin, WsPeerLeave, WsKicked ou WsPeerUpdate.

Autenticação

Antes de começarem a retransmitir mensagens para outros, os clientes devem se autenticar assinando uma string de desafio. Isso é necessário mesmo quando a URI do transporte foi obtida de Archipelago após uma rodada anterior de autenticação.

A primeira mensagem que um cliente envia ao entrar em uma ilha é WsIdentification, que contém um endereço público. Ele receberá como resposta WsChallengeRequired, e os clientes enviam um WsSignedChallenge em resposta.

  .----------.                .--------.
  |  Servidor  |                | Cliente |
  '----+-----'                '---+----'
       ⋮                          |
       ⋮                  Conectar |
       o - - - - - - - - - - - - -|
       |                          |
       |                          |
       |         WsIdentification |
       |<-------------------------+
       +------------------------->|
       | WsChallengeRequired      |
       |                          |
       |                          |
       |        WsSignedChallenge |
       |<-------------------------+
       +------------------------->|
       | WsWelcome                |
       |                          |

Se o fluxo for concluído com sucesso, o cliente receberá um WsWelcome e poderá começar a enviar mensagens para os peers.


WsIdentification ↗ fonte

Campo
Tipo
Valor

address

string

O endereço público de Ethereum do cliente


WsChallengeRequired ↗ fonte

Campo
Tipo
Valor

challenge_to_sign

string

A string fornecida pelo servidor para ser assinada como prova de identidade

already_connected

string

Uma dica do servidor para os clientes, indicando que conexões anteriores podem ser encerradas.


WsSignedChallenge ↗ fonte

Campo
Tipo
Valor

auth_chain_json

string

Serializado serializada em JSON serializada em JSON, terminando com a assinatura do desafio.


WsWelcome ↗ fonte

Campo
Tipo
Valor

alias

uint32

Um ID gerado pelo servidor para a sessão do cliente

peer_identities

map<uint32, string>

Os endereços de todos os peers atuais, indexados por alias

Conectividade

Três mensagens são definidas para ajudar os clientes a acompanhar seus peers e seu próprio status.

WsPeerJoin é recebida quando outro cliente se conecta à sala e se autentica com sucesso, enquanto WsPeerLeave é recebida quando os peers se desconectam.

Há também a WsKicked mensagem, que informa os clientes de que sua conexão está prestes a ser encerrada e o motivo disso. Na prática atual, o principal motivo pelo qual um servidor pode expulsar um cliente de uma sala é porque ele se conectou simultaneamente a outra sala, quando isso é proibido pela política do servidor.


WsPeerJoin ↗ fonte

Campo
Tipo
Valor

alias

uint32

O ID gerado pelo servidor enviado em WsWelcome

address

string

O endereço Ethereum do novo peer


WsPeerLeave ↗ fonte

Campo
Tipo
Valor

alias

uint32

O ID gerado pelo servidor do peer desconectado


WsKicked ↗ fonte

Campo
Tipo
Valor

reason

string

A explicação do servidor sobre por que a conexão será encerrada

Mensagens do client

Para enviar comms mensagens, os clientes os envolvem na WsPeerUpdate estrutura. Isso diferencia os tipos de mensagens de controle do transporte das mensagens reais enviadas entre peers.


WsPeerUpdate ↗ fonte

Campo
Tipo
Valor

from_alias

uint32

O ID gerado pelo servidor do remetente

body

bytes

O serializado message sendo envolvido

não confiável

bool

Se o remetente priorizou velocidade ou confiabilidade ao entregar esta mensagem

Os clientes devem definir o from_alias campo para 0 ao enviar, e o servidor o preencherá com o identificador correto antes de entregá-lo aos peers.

Atualizado