Giter Site home page Giter Site logo

chat_system's Introduction

Chat FSO

Informações sobre a implementação do Protocolo

  Segue os tópicos solicitados que já estão implementados no projeto.

  1. Criação do Chat: É possível criar uma chat personalizado com seu nome/apelido (chat-NAME).

   image

  1. Permissões: Após a criação da fila do próprio usuário é lhe concedido permissão de leitura e escrita para sua própria fila. Para os demais usuários é dado somente a permissão para escrita.

   image

  1. Formato da mensagem: Seguindo o solicitado, para enviar a mensagem deve-se escrever no seguinte formato DE:PARA:MENSAGEM. Onde o programa enviará a mensagem ao usuário que terá seu nome substituído no campo "PARA". Sendo então mostrado ao destinatário a mensagem no formato REMETENTE: MENSAGEM.

   image

  OBS 1: Sendo a função de verificação de mensagem na fila é blocante, foi criado uma thread para que não haja disputa de prioridade e trave o programa enquanto o usuário não receba uma mensagem.

  1. Fila inexistente: Caso o destinatário da mensagem não exista, será mostrado ao remetente a mensagem UNKNOWUSER <DESTINATÁRIO>.

   image

  1. Retry: Ao enviar uma mensagem, a fila do destinatário esteja cheia, ou por algum motivo de conexão não foi possível conectar a fila, são efetuadas três outras tentativas que espera um certo tempo para tentar reenviá-la novamente, isso tudo acontecendo em uma nova thread.

  2. Usuários onlines: Um usuário é considerado online quando sua fila está criada. Então, foi criado um comando chamado List que quando acionado, ele lista todos os usuários que estão ativos naquele momento. Facilitando então o envio da mensagem para quem o usuário deseja.

   image

  1. Broadcast: Ao digitar DE:ALL:MENSAGEM, a mensagem é enviada para todos os usuários que estão onlines naquele momento, aparecendo aos destinatários a seguinte mensagem Broadcast de : MENSAGEM.

   image

  1. Terminar execução: Foi bloqueado o comando Ctrl+C para finalizar a execução do programa. Assim, quando o usuário tenta finalizar, é apresentado uma mensagem solicitando que digite "Sair" para a finalizar o programa.

   image

Bonus

  1. Foram acrescentadas cores aos textos para diferenciar cada ação do chat.

 Segue então as cores do chat:

  • Verde: Mensagem do usuário remetente
  • Rosa: Mensagem do usuário destinatário
  • Amarelo: Mensagem de validações, UNKNOWUSER, Mensagem vazia, etc.
  • Vermelho: Mensagem de aviso, "Digite o comando sair para finalizar a execução"
  1. Caso o usuário esteja com alguma dúvida sobre o que ele pode fazer, ele poderá digitar o help que o auxiliará em como utilizar o programa.

   image

  1. E para saber mais sobre o estado da sua fila, basta o usuário digitar stats que conseguirá ver algumas informações sobre sua fila.

   image

Problemas conhecidos

  1. Quando você está digitando uma mensagem e recebe uma mensagem do broadcast, a mensagem a qual você está escrevendo é resetada.

Dificuldades de implementação das Threads

  1. Foi uma implementação um pouco mais tranquila, baseada no estudo que os membros do projeto já estavam fazendo. Então a maior dificuldade foi quando necessário fazer o Retry da mensagem, tendo que reenviá-la três vezes.

Comandos para executar

  1. Execute o comando seguinte para compilar e executar o código:
make run-all

  Com o comando anterior você já consegue criar seu próprio chat e conversa com outras pessoas.

  1. Caso queira abrir novos chats, não há necessidade de executar tudo novamente, então rode somente o seguinte comando em uma outra aba do terminal:
make run

chat_system's People

Contributors

guiaugusto avatar guilacerda avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.