Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jogo pela Internet #38

Closed
52 tasks done
Tracked by #173
chesterbr opened this issue Mar 25, 2023 · 0 comments
Closed
52 tasks done
Tracked by #173

Jogo pela Internet #38

chesterbr opened this issue Mar 25, 2023 · 0 comments
Assignees
Labels

Comments

@chesterbr
Copy link
Owner

chesterbr commented Mar 25, 2023

A idéia é migrar o servidor do https://github.com/chesterbr/minitruco-j2me e reimplementar a parte cliente (deve dar pra usar muito das activities Bluetooth).

#34 migrou uma versão inicial do servidor (já permite jogar via telnet com salas públicas) e #177 / #180 / #182 consertaram um monte de coisas. O que ainda falta está segregado abaixo:

Indispensáveis (não dá pra lançar sem isso)

  • Verificar que não é possível entrar na sala quando tem jogo em andamento ou finalizado (internet e bluetooth, mas mais internet mesmo) - o internet tá ok, Bluetooth tem o problema mas tá logado em Conexão Bluetooth derruba jogo em andamento #187
  • Checagem de versão (consolidar com o Bluetooth) Bloqueia versões antigas no servidor #190
  • Configurar o SO do servidor para aceitar um número "grande" de conexões (o maior obstáculo era memória; não precisamos de file handles ou qualquer outro recurso a cada novo jogador, e cada um está no máximo em uma sala e uma partida).
  • Limitar o no. de jogadores conectados Fix soft shutdown e limita jogadores #196
  • Permitir consulta fácil de # de jogadores conectados Fix soft shutdown e limita jogadores #196
  • Configurar o fail2ban ufw para evitar flood (não é um Cloudfare, é só pra evitar que script kiddies usem o load balancer ou algo tão básico quanto ele): chesterbr/chester-ansible-configs@39b353c
  • Update do servidor sem downtime e sem interromper partidas #183
  • Mensagem "Conectando" no cliente internet Melhorias visuais em salas multiplayer #197
  • Mostrar o botão internet e pedir as permissões adequadas
  • Configurar swapfile no servidor (e também reboot suave em caso de upgrades)
  • Rever formato dos logs (Correções no log do servidor #201 e chesterbr/chester-ansible-configs@e42f4e1 resolvem quase tudo, falta só a rotation que vai ter que ser no logrotate)
    • algumas coisas vêm formatadas, outras não (talvez elas só sejam coisas multilinha, tipo exceções - nesse caso, seria melhor logar com outro separador de linha pra beneficiar o grep? O que outros sistemas fazem?)
    • algumas vão pra stdout, outras pra stderr (provavelmente é log level, mas de repente nem vale a pena segregar; de repente configurar no supervisord)
    • tem que ter o PID do servidor (pra segregar servidor em shutdown)
    • tem que ter um tempo máximo na rotation (pra ser compliant com GDPR, etc.)
  • Atualizar política de coleta de dados (ver se vamos tirar IPs dos logs ou não; ver se devemos avisar que podemos usar os jogos para treinar AI)
  • Considerar aumento do tempo do keepalive no servidor (5s talvez seja meio agressivo para conexões ruidosas, e a maior parte dos disconnects vão ser sentidos na hora mesmo) (foi pra 10s em Ajustes finos da reta final (servidor) #206) e redução do timeout no cliente (para o jogador não esperar indefinidamente na hora de conectar) (esse é só 10s)

Salas públicas

Kick / troca de sala Defesa contra abuso

  • Botão "Nova Sala pública"; tirar o jogador da sala e mandar o comando de criar sala pra ele
  • Kick: se for gerente, botar um x no nome de cada jogador. Se clicar e confirmar, manda comando K + posição (internet), ou desconectar (bluetooth). Jogador vai pra nova sala pública (portanto gerente) com alertbox. Desisti, vamos acabar com o gerente
  • Eliminar o conceito de gerente em sala pública e só iniciar o jogo com ela cheia Elimina gerente (e bots) de salas públicas #203

Sala privada

  • Botão "Nova sala privada" em todos os jogadores internet
  • Botão "Entrar com código", mesmo acima
  • Exibir código da sala privada
  • Conferir se a implementação de sala privada no servidor está completa; implementar testes

Geral

  • Quando estiver em sala privada, desabilitar botão de criar sala privada e botão de entrar com código (ou ainda: esconder todos os botões; se a pessoa quiser sair, volta pra tela principal)
  • Opção "Sempre perguntar o nome ao conectar" Opção para entrar na internet sem perguntar o nome #204
  • Tratar falha ao entrar na sala corretamente (nem que seja fechando a activity, não pode ficar inconsistente)
  • Considerar códigos puramente numéricos (mais fácil de digitar e sanitizar)
  • Mais evidência no código
  • Mudar a cor da mensagem (ela fica parecendo um botão)
  • No cliente, não logar Keepalive
  • Não deixar a pessoa se chamar "bot"
  • Repensar títulos dos botões trocar/inverter posso fazer isso no futuro
  • Remover TTFFdas notificações I
  • Não deixar setar o nome se estiver dentro de uma sala
  • Inicia jogo internet sempre pelo gerente #191
  • Conferir se o keepalive não está atrapalhando
  • Suavizar o " ❌ Erro" na mensagem de desconexão/falha na conexão Melhorias visuais em salas multiplayer #197
  • Melhorar sistema de feedback #181
  • Implementar um kill switch do botão melhor botar um aviso de que é versão de testes, que os servidores podem sair do ar e fazer a pessoa clicar em "Entendi", ou nem isso
  • Mostrar o modo de jogo dentro da sala (e dar linha da barra de status, que é feia e ninguém vê
  • Considerar trocar os _ por espaços ao exibir o nome do jogador (também teria que trocar ao consultar; talvez seja treta a essa altura do campeonato )
  • bug: jogadores estão ficando pendurados no servidor; de repente um esquema pra listar todos os jogadores conectados? debugar com VisualVM? Ajustes finos da reta final (servidor) #206 via task abaixo (e também listando as threads que resistiram, que agora são nomeadas com o nome inicial do jogador)
  • considerar um timeout no shutdown (ex.: se demorar mais que 60 minutos, derruba) Ajustes finos da reta final (servidor) #206
  • considerar um restart mandatório diário (do server e/ou do servidor) já vai ter restart quase todo dia por causa de pacote de segurança que foi atualizado; se for preciso colocar isso, é fácil mexer no script do Ansible
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant