Introdução
Este Projeto tem como propósito desenvolver um Sistema de Chat completamente descentralizado.
Tal escolha foi motivada pelo risco em que uma arquitetura com um servidor central possui: caso o servidor fique indisponível, todas as outras estações caem.
Seguem abaixo uma figura que ilustra a arquitetura do Sistema. Observem que não há um servidor central:
Regras de Negócio
ID | Descrição |
---|---|
RN-01 | Todos os usuários possuem acesso a todas as mensagens da Sala. |
RN-02 | As informações das conversas deverão ser sigilosas, a fim de evitar que outras pessoas que não sejam participantes possam visualizar as informações. |
Requisitos Funcionais
ID | Descrição |
---|---|
RQF01 | O Sistema deverá permitir que o Usuário mantenha as configurações do Chat UDP, preenchendo os seguintes dados: – Nome do Usuário – Nome da Sala – Senha da Sala O Sistema deverá preencher automaticamente a seguinte informação: – ID do Usuário – IP do Usuário – ID da Sala O Sistema deverá apresentar uma Sala, contendo os seguintes dados: – Nome da Sala – Nome do Usuário – Campo onde ficarão as mensagens enviadas e recebidas – Campo onde ficará a lista de participantes – Campo onde o Usuário escreverá sua mensagem para ser enviada – Botão “Enviar” |
RQF02 | O Sistema deverá enviar a Mensagem de Presença para todos os outros participantes na sala. Além disso, o Sistema deverá receber a mensagem de Presença de todos os outros participantes. Tal mensagem deverá conter os seguintes dados: – Nome do Usuário – Data Hora – Tipo (PRESENÇA) Cada participante será considerado “online” , caso o Sistema receba sua Mensagem de Presença. Caso contrário, será considerado “offline”. Dessa forma, o Sistema deverá apresentar ao Usuário a lista de participantes da Sala, contendo os seguintes dados: – Nome do Participante |
RQF03 | O Sistema deverá permitir que o Usuário envie mensagens para todos os usuários na mesma sala, preenchendo os seguintes dados: Texto da Mensagem Mensagem de Referência (OPCIONAL) O Sistema deverá preencher automaticamente as seguintes informações: – Número da Mensagem – Data Hora do envio da Mensagem – Nome do Usuário – Tipo (MENSAGEM TEXTO) O Sistema deverá apresentar ao Usuário as seguintes informações: – Texto da Mensagem – Mensagem de Referência (se for o caso) – Número da Mensagem – Data Hora do envio da Mensagem – Data Hora de Recebimento de cada participante (atualizado automaticamente, assim que receber a mensagem do tipo RECIBO do referido participante) – Data Hora de Lido de cada participante (atualizado automaticamente assim que receber a mensagem do tipo LEITURA do referido participante) – Status de envio (não enviada ou enviada) |
RQF04 | O Sistema deverá receber todas as mensagens de todos os participantes da Sala. As mensagens recebidas conterão as seguintes informações: – Número da Mensagem – Participante que enviou a Mensagem (Origem) – Data Hora da Mensagem – Texto – Mensagem de Referência (se for o caso) |
RQF05 | O Sistema deverá permitir que o Usuário LISTE todas as mensagens enviadas que ainda faltam ciência de algum dos participantes. |
Requisitos Não-Funcionais
ID | Descrição |
---|---|
RQNF01 | O Sistema deve ter uma interface Web compatível para uso em desktop. |
RQNF02 | O Sistema deve ser desenvolvido utilizando a linguagem Python. |
RQNF03 | O Sistema deve persistir localmente todas as configurações e mensagens, a fim de, quando faltar energia, os dados não sejam perdidos. |
RQNF04 | Todas as mensagens deverão ser enviados criptografados. |
RQNF05 | As comunicações deverão ser por UDP. |
RQNF06 | O Sistema deverá ser completamente descentralizado, utilizando a arquitetura de Rede Malha. |
Identificação de Casos de Uso
ID | Descrição |
---|---|
RQF01 | UCS01 - Manter Configurações |
RQF02 | UCS02 - Enviar Mensagem de Presença UCS03 - Receber Mensagem de Presença |
RQF03 | UCS04 - Enviar Mensagem UCS11 - Referenciar Mensagem UCS08 - Receber Mensagem Recibo UCS09 - Receber Mensagem Lido |
RQF04 | UCS05 - Receber Mensagem UCS06 - Enviar Mensagem Recibo UCS07 - Enviar Mensagem Lido |
RQF05 | UCS11 - Listar Mensagens Enviadas Pendentes |
Sinta-se a vontade para contribuir como quiser ;)