A arquitetura do projeto segue o fluxo mostrado abaixo

Em que vários clientes podem se conectar a um servidor. A cada mensagem enviada por um cliente, o servidor a irá transmitir para todos os outros.
A fim de deixar um pouco mais desafiador, os clientes precisam converter as mensagens de texto inseridas pelos usuários no terminal em arquivos .txt que serão enviados ao servidor em chunks de até 1024 bytes. Além disso, na retransmissão da mensagem, os usuários receberão chunks de até 1024 bytes que, uma vez organizados novamente, devem ser mostrados como output no terminal do usuário. Os diagramas abaixo trazem mais informações:

Do lado do servidor, será preciso agrupar diferentes chunks de uma mensagem (podemos optar por reconstruir o arquivo .txt) e retransmiti-los corretamente para os clientes no chat.
A imagem abaixo traz mais detalhes.
Para um desenvolvimento local intuitivo e simples, recomenda-se a utilização de um ambiente virtual Python (Python venv), ou rodar o projeto em um contêiner Docker. Note que o projeto não possui um Dockerfile, ficando a cargo da pessoa que decidir utilizar essa ferramenta por criar o arquivo e lidar com eventuais problemas.
Para criar um venv, use o comando abaixo:
python -m venv .venvApós isso, será necessário ativar o ambiente virtual, usando o comando abaixo:
- Para ambientes Unix:
source .venv/bin/activate- Para Windows:
.\.venv\Scripts\activateO projeto utiliza a dependência externa Pytest para rodar os testes, portanto, será necessário instalar as bibliotecas listadas no arquivo requirements.txt, para tal, basta utilizar o comando abaixo:
pip install -r requirements.txtA fim de aumentar a produtividade das pessoas ligadas ao projeto, estamos utilizando um makefile com os seguintes comandos:
test: Responsável por rodar os testes do projetoclient: Responsável por criar uma instância Clienteserver: Responsável por criar uma instância Servidor
Para rodar os comandos, faça:
cd Entrega_X
make NOME_DO_COMANDOEm que Entrega_X é o nome da entrega que você quer testar (as opções são Entrega_1 e Entrega_2) e NOME_DO_COMANDO deve ser um dos listados anteriormente.

