Projeto desenvolvido para matéria de Redes 1
Documentação do código do projeto
Sumário
O projeto é de criação de um chat que conecte diversas pessoas na mesma rede. Ele se chama coffee-chat por nossa paixão por café (exceto Samuel) e por ser nosso melhor companheiro na horas mais tardias enquanto programamos.
O projeto foi testado para plataformas windows 10 e ubuntu 20.04.
Esse projeto originou-se pela curiosidade de compreender como o processo de um chat em real-time funciona, além de aprender como diversos computadores poderiam estar conectados na mesma rede sem que houvesse falha no recebimento e envio de mensagens.
Para esse projeto utilizamos o Python e o Conda para conteinerização das depedências.
Todos os requisitos necessários para rodar o projeto estão especificados no arquivo environment.yml
localizado no diretório raiz do projeto.
Pode ser feita a instalação das dependências via conda
ou pip
.
Para instalar via conda é necessária ter a última versão do mesmo. Um tutorial para fazer a instalação corretamente do conda no Windows, macOS ou Linux pode ser acessada aqui.
Após concluir a instalação do conda, basta executar o seguinte comando na CLI:
conda env create -f environment.yml
Feito isso, todas as dependências que estão localizadas no environment.yml
serão instaladas no ambiente que será criado com o nome coffee-chat
. Para ativar o ambiente execute o comando a seguir:
conda activate coffee-chat
Para instalar o projeto utilizando o pip basta utilizar o arquivo requiriments.txt
localizado no diretório raiz do projeto. Basta executar o comando a seguir:
pip install -r requirements.txt
A versão do pip utilizada no desenvolvimento do projevo foi a v20.3.
O CoffeeChat oferece recurso de notificação para usuários Windows, para isso é necessário instalar duas bibliotecas, executando o comando que segue:
pip install pywin32
pip install win10toast
O projeto é dividido em servidor e cliente. O servidor conectar e gerencia todas as requisições dos clientes. O cliente se comunica com o servidor mandando mensagens e renderiza o retorno dele.
Para rodar o projeto é preciso iniciar um servidor em um endereço IP na rede que os demais clientes possam acessar. Em seguinda é necessário conectar os clientes com esse IP.
Para iniciar o servidor rode o seguinte comando:
python server.py
Após rodar esse comando irá aparecer a seguinte caixa de texto, basta clicar no texto dela e digitar o IP onde o servidor irá rodar e depois aperta ENTER
Com isso o servidor estará pronto para receber os clientes
Para iniciar um cliente basta abrir outro terminal, caso esteja no mesmo computador do servidor, e rodar o seguinte comando
python client.py
Irá abrir uma caixa semelhante ao do servidor, basta preencher com o IP do seu servidor e depois aperta em ENTER
Em seguida, irá abrir uma nova caixa pedindo para o nome de identificação do usuário
Após preencher o nome do usuário irá abrir uma janela para o chat:
Para testar basta digitar algo e enviar. Atenção! o input do chat não aceita caracteres especiais.
Para criar um novo chat basta abrir um novo terminar e rodar o comando para rodar o cliente novamente e preencher com os dados do servidor, o mesmo vale para caso esteja testando em outro computador.
Quando um novo usuário entra na rede os usuários já existentes são notificados
É possivel conectar diversos usuários ao chat, no windows 10 sempre que tiver uma nova mensagem aparecerá ela na notificação do SO
Para a aplicação enviar e receber mensagens criamos uma estrutura client-server, onde o servidor é responsável por receber mensagens e difundir elas para os clientes conectados. Para comunicação entre o servidor e o cliente usamos o modelo TCP/IP.
O servidor quando roda ele armazena todos os clientes conectados guardando seus IP's e suas portas. A distribuição de mensagem funciona da seguinte forma
- Um cliente manda uma mensagem para o servidor
- O servidor recebe e processa a mensagem
- O servidor envia as mensagens para todos os clientes conectados
- Os clientes conectados mostram a mensagem da tela
Para mais informações de como foi realizado a implementação acesse o link da documentação