Repository navigation
Releases: marinaggc/LPII_Trabalho_Final
Release list
Entrega da Etapa 3: Sistema Completo
Este release corresponde à entrega final (Etapa 3) do projeto de Programação Concorrente. O sistema de chat multiusuário está completo, com todas as funcionalidades obrigatórias implementadas, juntamente com a documentação e análise crítica.
Funcionalidades Implementadas
Servidor TCP Concorrente: Aceita múltiplas conexões de clientes simultaneamente.pdf, source: 1443].
Threads Dedicadas: Cada cliente conectado é gerenciado por uma std::thread individual.pdf, source: 1444].
Broadcast: As mensagens são retransmitidas para todos os outros clientes conectados.pdf, source: 1444].
Cliente CLI: Cliente de linha de comando para conectar, enviar e receber mensagens de forma assíncrona.pdf, source: 1446].
Proteção de Dados: As estruturas compartilhadas (lista de clientes e histórico de mensagens) são protegidas contra condições de corrida usando std::mutex e std::lock_guard.pdf, source: 1448].
Controle de Conexões: Foi implementado um limite de 5 clientes simultâneos usando std::condition_variable para gerenciar o acesso.
Logger Thread-Safe: O sistema possui um logger concorrente customizado que utiliza std::mutex para garantir a escrita segura no arquivo de log.pdf, source: 1445; RELATORIO.md].
Observação: Foi implementado um logger customizado em vez de utilizar a biblioteca libtslog externa.
Relatório Final
O relatório completo, incluindo o mapeamento de requisitos, o diagrama de sequência e a análise crítica com IA, está disponível no arquivo RELATORIO.md.
Clique aqui para acessar o Relatório Final
Como Compilar e Executar
Compilar o projeto:
Bash
make all
Executar o servidor:
Bash
./bin/server.exe
Executar um ou mais clientes (em terminais separados):
Bash
./bin/client.exe
Entrega da Etapa 2: Protótipo CLI de Comunicação
LPII - Trabalho Final: Programação Concorrente - Etapa 2
Esta entrega corresponde à Etapa 2: Protótipo CLI de Comunicação.
Funcionalidades Entregues na Etapa 2
-
Servidor Concorrente Funcional: Foi implementado o servidor TCP que aceita múltiplas conexões de clientes simultaneamente. Cada cliente é gerenciado em uma thread separada, permitindo que o servidor permaneça responsivo para novas conexões.
-
Cliente CLI: Foi desenvolvido um programa cliente de linha de comando (
client.exe) que permite ao usuário conectar-se ao servidor, enviar mensagens e receber respostas. O cliente também utiliza uma thread para receber mensagens de forma assíncrona, não bloqueando o usuário. -
Comunicação em Rede: O protótipo demonstra a comunicação básica em rede. O cliente envia mensagens de texto para o servidor, e o servidor confirma o recebimento.
-
Logging Integrado: A biblioteca
libtslogda Etapa 1 foi integrada ao servidor para registrar eventos importantes, como inicialização, conexões de novos clientes, mensagens recebidas e desconexões.
Como Compilar e Executar
Este projeto utiliza make para compilar os executáveis do servidor e do cliente.
-
Pré-requisitos:
- Compilador C++ (G++)
- Make
-
Compilar o projeto:
No terminal, na raiz do projeto, execute o comando para compilar ambos os programas:make
Isso criará os arquivos
server.exeeclient.exedentro da pastabin/. -
Executar o Servidor:
Abra um terminal e inicie o servidor com o seguinte comando:./bin/server.exe
O servidor ficará rodando, aguardando por conexões.
-
Executar o(s) Cliente(s):
Abra um novo terminal para cada cliente que desejar conectar. Execute o comando:./bin/client.exe
Você pode abrir vários terminais e rodar este comando em cada um para simular múltiplos clientes.
Entrega da Etapa 1: libtslog e Arquitetura
LPII - Trabalho Final: Programação Concorrente - Etapa 1
Este é o repositório para o trabalho final da disciplina de LPII.
Esta entrega corresponde à Etapa 1: libtslog e Arquitetura.
Funcionalidades Entregues na Etapa 1
-
Biblioteca de Log Thread-Safe (
libtslog): Foi implementada uma biblioteca de log simples, encapsulada na classeLogger, que permite a escrita concorrente em um arquivo de log. A exclusão mútua é garantida pelo uso destd::mutexpara evitar condições de corrida. -
Teste CLI de Concorrência: Um programa principal (
main.cpp) foi desenvolvido para simular um ambiente com múltiplas threads (10 threads, cada uma escrevendo 100 mensagens) que utilizam a biblioteca de log simultaneamente para demonstrar que ela é, de fato, thread-safe. -
Arquitetura Inicial (Tema A: Servidor de Chat): Foi definida a arquitetura inicial para o projeto.
- [cite_start]Headers Principais: Foram criados os arquivos de cabeçalho
Server.heClient.hcom a declaração das classes e seus principais atributos e métodos. [cite: 59] - [cite_start]Diagramas: Foram produzidos o diagrama de sequência, para ilustrar o fluxo de comunicação, e o diagrama de classes, para mostrar a estrutura estática do projeto. [cite: 59]
- [cite_start]Headers Principais: Foram criados os arquivos de cabeçalho
Como Compilar e Executar
Este projeto utiliza make para a compilação.
-
Pré-requisitos:
- Compilador C++ (G++)
- Make
-
Compilar o projeto:
No terminal, na raiz do projeto, execute o comando:make
-
Executar o teste da biblioteca de log:
Após a compilação, execute o programa de teste:./bin/teste.exe
-
Verificar o resultado:
Um arquivo chamadolog_concorrente.txtserá criado na raiz do projeto, contendo as mensagens de todas as threads de forma organizada.