Segue os tópicos solicitados que já estão implementados no projeto.
- Criação do Chat: É possível criar uma chat personalizado com seu nome/apelido (chat-NAME).
- 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.
- 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.
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.
- Fila inexistente: Caso o destinatário da mensagem não exista, será mostrado ao remetente a mensagem UNKNOWUSER <DESTINATÁRIO>.
-
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.
-
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.
- 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.
- 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.
- 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"
- 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.
- 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.
- Quando você está digitando uma mensagem e recebe uma mensagem do broadcast, a mensagem a qual você está escrevendo é resetada.
- 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.
- 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.
- 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