
Mapas que chegam sozinhos: pacotes de conteúdo assinados
Um mapa editado não vale nada se cada jogador precisa ser avisado para copiar um arquivo. Por isso o servidor agora pode enviar por conta própria os mapas alterados para o cliente novo.
O fluxo
- Alguém edita um mapa na suíte de editores e salva. A mudança vai para um overlay.
- Na máquina do servidor, o dono publica — um único comando, que compara os arquivos com a instalação original, mantém só os que são diferentes, empacota tudo e assina o pacote.
- O servidor em execução oferece o pacote a todo cliente que se conecta, e também aos que já estão conectados.
- O cliente baixa, verifica a assinatura, descompacta em um cache privado e coloca por cima da instalação. Na próxima vez que você entrar no mapa, vai ver o novo.
Se um pacote chegar enquanto você está fazendo login, a primeira cena espera por ele — até um minuto, com uma caixinha "Atualizando o conteúdo do jogo…" — para que ninguém caia em um mundo pela metade. Quem já está dentro recebe uma linha no chat e vê a mudança na próxima vez que entrar no mapa. Um pacote que o cliente já tem é reaproveitado do cache, então um segundo login não custa nada.
O que importa: confiança
Um servidor que pode enviar arquivos para o seu computador é um servidor em que você precisa poder confiar, então o projeto parte da suposição oposta: assumimos que o servidor pode ser invadido.
- Os pacotes são assinados com uma chave que nunca fica no servidor em execução. O dono assina offline, na própria máquina. Um estranho que tomasse o servidor poderia oferecer pacotes, mas não conseguiria assinar nenhum, e o cliente o recusaria.
- O cliente carrega a chave pública correspondente. Qualquer coisa sem assinatura, alterada depois de assinada ou assinada por outra pessoa é descartada — não "usada com um aviso".
- Só arquivos de mapa. Um pacote pode conter arquivos de mapa, configurações de terreno e água e listas de estilos de textura, e mais nada: nem programas, nem scripts, nem bibliotecas. Os caminhos são conferidos para que um pacote não consiga escrever fora da própria pasta de cache, e a descompactação recusa qualquer coisa que tente seguir um link para outro lugar.
- Camadas, em ordem. O seu overlay local vale mais que um pacote enviado, e um pacote vale mais que a instalação. Assim, as mudanças locais de um modder nunca são substituídas em silêncio, e remover um pacote traz de volta o mapa original.
- É reversível. Retire um pacote e os clientes conectados o apagam na próxima conexão. Nada fica para trás.
Testamos cada um desses pontos de propósito: o formato do pacote, suas regras de tamanho e de caminho, assinaturas forjadas, downloads adulterados, um cache alterado e o portão de carregamento. O autoteste desta função roda 308 verificações, e todas passam. Também rodamos o ciclo completo de verdade contra um servidor local — publicar, ver um cliente baixar, verificar e montar o pacote, reconectar e reaproveitar o cache, remover o pacote, ver o cliente apagá-lo.
Onde estamos
Nada está sendo servido ainda. Este post é sobre o encanamento. Ele é o motivo pelo qual o mapa que você edita na terça pode ser o mapa em que os jogadores andam na quarta, e é por isso que topamos gastar uma semana com assinaturas: uma forma de entregar conteúdo aos jogadores é o tipo de coisa que se faz com cuidado uma vez só.







