Meu primeiro repositório versionado Olá, Gemini. Quero que você crie um servidor de backend em Java para uma aplicação de chat.
Contexto:
O frontend é um aplicativo móvel feito em React Native que usa a biblioteca socket.io-client para
comunicação. O frontend já está pronto e espera que o backend siga o protocolo Socket.IO. Um servidor
WebSocket padrão (RFC 6455) não será compatível.
Requisitos do Servidor:
-
Tecnologia:
- Linguagem: Java
- Framework/Biblioteca Principal: Use a biblioteca netty-socketio para criar um servidor compatível com Socket.IO.
- Gerenciador de Dependências: Use Maven. Forneça o arquivo pom.xml completo.
- Porta: O servidor deve rodar na porta 8081.
-
Modelo de Dados: Crie uma classe Message (pode ser um record Java) com os seguintes campos:
- id (String, gerado via UUID.randomUUID().toString())
- sender (String)
- text (String)
- timestamp (long, gerado via System.currentTimeMillis())
-
Lógica de Negócio:
- Mantenha um histórico das mensagens em uma lista na memória (por exemplo, List).
- O servidor deve ser configurado para permitir conexões de qualquer origem (CORS *) para facilitar o desenvolvimento.
-
Eventos Socket.IO: O servidor deve manipular os seguintes eventos:
-
Ao Conectar (
connect):- Um cliente se conecta passando um username como parâmetro na query de conexão (ex: http://localhost:8081?username=NOME). Extraia esse nome de usuário.
- Imprima no console que um usuário se conectou (ex: Usuário 'NOME' conectado.).
- Envie para apenas esse cliente o histórico de mensagens usando o evento previousMessages. O payload deve ser a lista de mensagens em memória.
-
Ao Receber Mensagem (
sendMessage):- O servidor deve escutar o evento sendMessage.
- O payload recebido será um objeto com sender e text. Crie uma classe para representar esse objeto de entrada.
- Crie um novo objeto Message completo, com um novo id e timestamp.
- Adicione esta nova mensagem à lista de histórico em memória.
- Envie esta nova mensagem para todos os clientes conectados (broadcast) usando o evento receiveMessage.
-
Ao Desconectar (
disconnect):- Imprima no console que o usuário desconectou.
-
Estrutura do Projeto:
Por favor, forneça o código completo para os seguintes arquivos, dentro de uma estrutura de projeto Maven
padrão:
- pom.xml
- src/main/java/com/example/chat/ChatServer.java (a classe principal que configura e inicia o servidor)
- src/main/java/com/example/chat/model/Message.java (o modelo de dados da mensagem)
- src/main/java/com/example/chat/model/MessageIn.java (o modelo de dados para a mensagem recebida)