Servidor multiplayer • simulação compartilhada

Um mesmo espaço de voo.
Vários participantes.

Este servidor conecta sessões do Cockpit Drone para compartilhar posições e eventos de simulação. Participantes a até 2 km aparecem no mapa e na lista da câmera.

Esta é a página de orientação. O status da API verifica o serviço HTTP; não confirma que o WebSocket esteja em execução.

Cockpit / sitePublica a posição simulada
Servidor multiplayerFiltra participantes por proximidade
Outras sessõesRecebem as atualizações
Download & Simulação

Baixe o Cockpit Drone e o Simulador

Para começar a simular e pilotar, acesse a pasta oficial de binários compilados ou baixe o instalador para Windows diretamente do GitHub.

📁 Pasta bin/ no GitHub

Contém os executáveis compilados do Cockpit Drone (drone.exe), do Simulador 3D (simulador.exe) e o instalador oficial:

  • setup_cockpit_drone_0.41.exe: Instalador completo para Windows com simulador, cockpit e recursos.
  • drone.exe: Interface do Cockpit com instrumentos de voo, HUD tático e GPS duplo.
  • simulador.exe: Simulador de física e dinâmica de voo com suporte a rede local e mundo compartilhado.

🕹️ Experiência de Controle: Joystick vs Teclado

O simulador é melhor rodado em um joystick analógico (como controles USB de videogame ou manches de voo), pois proporciona controle contínuo e suave dos 4 eixos de voo (arfagem, rolagem, guinada e aceleração).

No entanto, o simulador e o cockpit também podem ser pilotados perfeitamente pelo teclado, contando com corte de emergência na barra de espaço e centralização automática.

Para quem vai simular

Conecte sua sessão em quatro passos

Cockpit Drone • Windows
  1. Use uma versão com a integração multiplayer. Abra o Cockpit Drone e prepare uma simulação de rota com coordenadas válidas.
  2. Peça o endereço ao administrador. Na janela principal, clique em Entrar multiplayer.
  3. Informe o endereço WebSocket. Em produção, normalmente será semelhante a wss://seu-servidor.example/ws.
  4. Ative a simulação e abra o mapa ou a câmera. Sessões próximas aparecerão automaticamente. Use Sair multiplayer para encerrar.

Na câmera, os participantes aparecem em uma lista de proximidade. Não há sobreposição em perspectiva sobre o vídeo.

Qual endereço devo usar?

O endereço depende da instalação. Os exemplos abaixo não apontam para um servidor público.

Servidor na mesma máquina
ws://127.0.0.1:8081

Servidor publicado com HTTPS
wss://seu-servidor.example/ws

Alternativa pela API HTTP
https://seu-servidor.example/PHP

Use a URL base da API, sem /health nem /nearby. Em outra máquina, 127.0.0.1 aponta para ela própria: peça o endereço correto do servidor.

Onde o serviço é instalado? O serviço WebSocket roda no servidor, que pode ser o mesmo computador do simulador. No cockpit, você configura o endereço; não precisa instalar PHP em cada estação participante.
Estou usando o executável separado “simulador.exe”

A pasta simulador/ contém outro cliente, que ainda utiliza o protocolo servidor_mundo/public/api.php. Nesse programa, preencha o endereço desse servidor e um apelido no painel Mundo compartilhado, e clique em Entrar.

Esse campo ainda não aceita o WebSocket desta página. A integração WS descrita acima está no cockpit e usa a simulação de rota. A unificação dos dois protocolos está pendente.

Para quem administra o servidor

Instale e mantenha o serviço disponível

Requisitos: PHP 8.1 ou superior, Composer e uma hospedagem que permita processo PHP persistente. Para MySQL, habilite PDO MySQL. Em produção, publique o WebSocket com TLS e certificado válido.

1. Prepare a configuração

Obtenha o código no GitHub: marcelomaurin/cockpit_drone.

git clone https://github.com/marcelomaurin/cockpit_drone.git
cd cockpit_drone/PHP

Publique a pasta PHP/ do projeto. Somente na primeira instalação, copie config_sample.php para config.php e ajuste o ambiente.

  • files: configure uma pasta gravável fora da área pública.
  • mysql: configure banco, usuário e senha. O banco deve existir; tabelas ausentes são criadas automaticamente, incluindo params com VERSAO = 0.01.
  • Use o mesmo armazenamento para REST e WebSocket. O serviço WS não utiliza APCu.

Mantenha o config.php da produção nas atualizações. Não o substitua pelo arquivo de exemplo.

2. Instale as dependências e inicie

No terminal, entre na pasta PHP e execute:

composer install --no-dev --prefer-dist
php ws-server.php

O terminal deverá mostrar Cockpit Drone WebSocket ready. A escuta padrão é 127.0.0.1:8081.

Esse comando funciona enquanto o processo estiver aberto. Não basta abrir ws-server.php no navegador.

3. Publicar com WSS e permitir acesso pelo site

Configure um proxy reverso HTTPS para encaminhar a rota /ws ao processo local. Exemplo para inserir em um servidor Nginx que já possua HTTPS configurado:

location /ws {
    proxy_pass http://127.0.0.1:8081;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 75s;
}

Para clientes no navegador, inclua a origem do site em ws_origins no config.php, por exemplo ['https://seu-site.example']. Sem essa configuração, conexões de navegador são recusadas.

O endereço público do exemplo será wss://seu-servidor.example/ws. A porta interna não precisa ser exposta à internet quando o proxy roda no mesmo servidor.

4. Manter o processo ativo como serviço no Linux

Exemplo de unidade /etc/systemd/system/cockpit-drone-ws.service. Ajuste o caminho de instalação e o usuário para seu servidor; esse usuário precisa acessar a configuração e o armazenamento.

[Unit]
Description=Cockpit Drone WebSocket
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/cockpit_drone/PHP
ExecStart=/usr/bin/php /var/www/cockpit_drone/PHP/ws-server.php
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

Depois de salvar a unidade:

sudo systemctl daemon-reload
sudo systemctl enable --now cockpit-drone-ws
sudo systemctl status cockpit-drone-ws
sudo journalctl -u cockpit-drone-ws -n 50

No Windows, valide primeiro com php ws-server.php. Para operação permanente, configure um gerenciador de serviços para iniciar esse mesmo comando, usando o caminho do PHP e a pasta de trabalho da instalação.

Verificação e dúvidas

O que conferir se não conectar

SituaçãoComo resolver
A API mostra status: okO serviço HTTP respondeu. Confirme também se ws-server.php está ativo e se o proxy encaminha conexões WebSocket.
Armazenamento filesOs dados estão em arquivos. Para usar tabelas, configure storage como mysql e informe a conexão em config.php.
Nenhum participante apareceAtive a simulação de rota nas duas sessões, use o mesmo servidor e confira se as posições estão a até 2 km.
Conexão recusadaConfira endereço, porta, processo PHP, proxy e regras de acesso da rede. No navegador, confira também ws_origins.
HTTP 503 / configuração ausenteCrie config.php a partir do modelo e configure o ambiente. A página de instruções pode abrir mesmo antes dessa etapa.
HTTP 500Consulte o log do PHP, procurando por Drone API:. Confira versão do PHP, driver do banco, credenciais e permissões.

O projeto está em desenvolvimento. Compile o cockpit com suas dependências Lazarus/AI Drone; a ausência da unidade aidronemavlink impede a compilação completa. Baixe o instalador pronto e os executáveis na pasta bin/ do repositório GitHub.