Sala de bate papo

Implementar um Sistema de Gerenciamento e Utilização de Comunicação por Mensagens.

Deve ser implementado um servidor (sockets ou RMI/RPC) para gerenciar o Broker, com as seguintes funcionalidades:

  1. Adicionar e remover filas e tópicos ✔️
  2. Listas quantidade de mensagens nas filas ⏳ 🐛 :shipit:
  3. Instanciar novos usuários (verificar duplicidade de nomes) ✔️
  4. Criar automaticamente uma fila para cada usuário novo criado ✔️

Os usuários, por sua vez, devem implementar as seguintes funcionalidades:

  1. Permitir assinar tópicos ✔️
  2. Enviar mensagens entre usuários diretamente online ✔️
  3. Enviar mensagens entre usuários diretamente offline ⏳ 🐛 :shipit:
  4. Enviar mensagens para tópicos ⏳ 🐛

Tecnologias utilizadas nesse projeto

Python 3.7.7

RabbitMQ

Pika

PyRabbit

Kivy

Docker

Pyro4

Executando o projeto

  1. Para começar, precisamos subir o serviço do RabbitMQ. Para isso, execute o seguinte comando (caso você tenha o docker instalado em sua máquina):

docker run --rm -p 5672:5672 -p 8080:15672 rabbitmq:3-management

obs.: caso você não tenho o Docker instalado, instale-o ou siga as instruções do site ofical do RabbitMQ

Após subir o serviço, acesse http://localhost:8080 com usuario e senha guest para acessar o gerenciador diretamente do browser.

  1. Você deve subir o servidor de nomes, para que possamos registrar o servidor do chat e possibilitar o seu acesso remoto. Para isso, abra um terminal e execute o comando abaixo:

    pyro4-ns

  2. Para registra o servidor no servidor de nomes, abra um outro terminal e execute:

    python servidor_rmi.py

  3. Agora para iniciar a interface de gerenciamento do servidor, abra um novo terminal e execute:

    python servidor.py

  4. Tamo chegando lá, calma kkk. Para executar a interface do usuário, abra um novo terminal para cada novo usuário que você queira utilizar e execute o comando abaixo:

    python usuario.py

Ufa, acho que agora podemos bater um papo em paz. Aproveitem xD

Dificuldades encontradas

  • Na primeira vez que fui executar o hello world do rabbitmq, tive que utilizar o comando abaixo:

sudo apt-get install rabbitmq-server

Após isso, foi possível enviar a mensagem para o broker.

  • Caso dê problema com a porta usada pelo rabbitmq, acesse esse link

  • Não consegui utilizar uma função no servidor_rmi para escutar as filas. A solução que achei foi deixar essa parte no próprio usuário 😔

Melhorias pendentes

  • Deixar as interfaces do servidor e do cliente mais amigáveis/bonitas
  • Enviar de forma correta as mensagens para todos que assinam um tópico
  • Colocar a informação da quantidade de mensagens em cada fila na interface do servidor (existe uma função que busca essa informação mas não está sendo utilizada na GUI)
  • Permitir a comunicação entre usuários que estejam offline

Materiais de estudo usados como base