Skip to main content

halk-patch-server

Servidor de patch do launcher do MHF. É responsável por entregar os arquivos de atualização do jogo para os jogadores quando o launcher inicializa.

Escrito em Rust, exposto externamente via um nginx que atua como proxy reverso e serve arquivos diretamente do PVC usando X-Accel-Redirect. Substitui o gogomoa-patch-server, que era a implementação anterior em PHP.

Como funciona

Quando o launcher abre, ele faz login no sign server (kelbi-sign-server). O sign server autentica o usuário e retorna a URL do patch server que o launcher deve usar para baixar atualizações.

Portas

O binário Rust sobe três servidores ao inicializar:

PortaFunção
4000Provider de release — servido pelo nginx como release.halk-en.arcamh.com
4001Provider de pre-release — servido pelo nginx como pre-release.halk-en.arcamh.com
5000API administrativa (interna, protegida por API key)

URLs de patch server

O sign server decide qual URL retornar com base na coluna patch_server_url da tabela users e no idioma do usuário (language):

patch_server_url preenchida → usa esse valor (para qualquer idioma)
patch_server_url null + language = JP → PatchServers.Jp (config)
patch_server_url null + language = EN → PatchServers.En (config)

O sign server envia duas URLs na resposta de login: PatchServerManifest e PatchServerFile. Quando patch_server_url está preenchida, ambas recebem o mesmo valor.

Isso permite que usuários específicos apontem para o pre-release sem afetar os demais jogadores.

Estrutura de dados

O PVC (halk-en-patch-data) é montado em /app/data tanto no halk-patch-server quanto no nginx (read-only). Estrutura:

data/
base/ # arquivos base imutáveis (chk.txt)
release/ # versão atual servida para todos
key.txt
mhfdat/
pre-release/ # versão em teste para devs
key.txt
mhfdat/
versions/ # histórico de versões lançadas
1/
2/
temp/ # arquivos temporários durante upload
server_state.json

Ciclo de release

upload arquivos → data/pre-release/

POST /launch

pre-release → data/versions/{N}/ (backup)
pre-release → data/release/ (ativo)

launcher recebe nova versão

Em caso de falha no launch, o rollback restaura automaticamente a versão anterior a partir de data/versions/.

Ambientes

Existem duas instâncias independentes em produção:

InstânciaDomínioPVC
halk-enhalk-en.arcamh.comhalk-en-patch-data
halk-jphalk-jp.arcamh.comhalk-jp-patch-data

Cada instância tem seu próprio par halk-*-api (Rust) + halk-*-cdn (nginx).

Pre-release para devs

Para que um dev utilize o pre-release, um administrador preenche o campo patch_server_url do usuário no Kelbi Admin com pre-release.halk-en.arcamh.com. Enquanto o campo estiver vazio, o launcher recebe a URL padrão definida na config do erupe para o idioma do usuário.

API administrativa

A API (porta 5000) é protegida por API key e usada pelo Kelbi Admin para gerenciar o ciclo de release:

EndpointDescrição
POST /launchPromove o pre-release para release e cria backup versionado
POST /set/:versionRestaura uma versão específica do histórico
GET /healthHealth check