Giter Club home page Giter Club 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  avatar

Forkers

marciogiovane

chat_system's Issues

Updates README with project purpose

Description

It's necessary to create a README that show all that is important about the project, as integrants name, purpose, what is and how to compile it.

Tasks

  • Creates topic that explains project context.
  • Creates topic about how to run the project.
  • Creates topic that shows all integrants that made a contribution to the project.

Implements person_name validation

Description

Before message be showed to receiver user, it has a necessity to validate if the user queue exists in mqueue folder ("if it is online at the server"). To do this, its necessary check before send message to an user, showing the message "UNKNOWUSER (user)".

Tasks

  • Creates a method to do the user validation, checking if their queue exists in queue's list.
  • Shows exception message to sender user.

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.