Sobre o projeto

OwnChat é um aplicativo de chat de desktop auto-hospedado para usuários que desejam controle sobre sua comunicação. Ele segue uma arquitetura cliente-servidor-cliente, onde vários clientes de desktop se conectam a um servidor central que retransmite mensagens em tempo real. O aplicativo é construído com Java Swing para a interface do usuário, Java Sockets para rede e Oracle Database para armazenamento persistente. Os principais recursos incluem: - **Criação de conta e login**: As credenciais do usuário são armazenadas na tabela `USER_DETAILS` e validadas durante o login. - **Gerenciamento de contatos**: Os usuários podem adicionar contatos, visualizar sua lista de contatos e verificar se um contato está online antes de iniciar um chat. - **Mensagens em tempo real**: Cada cliente conectado registra um socket com o servidor; as mensagens são retransmitidas ao vivo para o destinatário se ele tiver uma janela de chat aberta. Todas as mensagens são registradas em `CHAT_HISTORY`. - **Histórico de chat**: Reabrir um chat com um contato reproduz mensagens anteriores, codificadas por cor conforme o remetente, com cabeçalhos de data/hora. - **Temas**: Os usuários podem escolher entre os estilos Metal, Dark e Light. O tema selecionado é salvo por usuário na tabela `SETTINGS` e aplicado automaticamente no login. - **Rastreamento de status online/offline**: O servidor atualiza `LOG_STATUS` sempre que um usuário abre/fecha a lista de contatos ou faz login/logout, incluindo um gancho de logout automático ao fechar a janela. - **IP de servidor configurável**: Os clientes podem apontar para qualquer host de servidor por meio de uma tela de configurações simples. - **Tela Sobre**: Exibe informações do desenvolvedor e de marca. O projeto é estruturado em três partes principais: o aplicativo cliente, o servidor e o esquema do banco de dados. O cliente consiste em várias classes Java para diferentes telas (boas-vindas, login, criar conta, configurações, contatos, janela de chat, etc.). O servidor é multithread, tratando cada conexão de cliente em uma thread separada, e usa um `ConcurrentHashMap` para rastrear clientes conectados para retransmissão de mensagens. O esquema do banco de dados inclui tabelas para usuários, configurações, status de login, contatos e histórico de chat, com triggers para pré-popular configurações padrão e status inicial de logout para novos usuários. A configuração envolve construir o banco de dados Oracle executando o script SQL fornecido, depois executar o executável do servidor (OwnChatS-Portable.zip) e inserir as credenciais do banco, e finalmente executar o executável do cliente (OwnChat-Portable.zip), definir o IP do servidor, criar uma conta e conversar. O roadmap menciona uma futura versão baseada na web usando Servlets, JSP, J2EE e Spring Boot com um frontend em HTML/CSS/Bootstrap.