Skip to content

Math-O5/internal-relay-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bate-Papo 💬

epic trabalhinho redes: Internal Relay Chat (IRC)

Descrição

Implementação dos antigos Internal Relay Chat (IRC), o qual pode ser chamado também de antigo Telegram.
O protocolo de comunicação seguido foi o IRC 1459, o qual estabelece um padrão de comunicação client-server.

Essa aplicação permite a comunicação entre multiplos processos e em máquinas distintas. Para isso, basta executar a aplicação do servidor e a aplicação do cliente. Podem ser executados diversos clientes.

Para dois clientes se comunicarem, eles devem estar no mesmo canal. O administrador do canal é o usuário que está a mais tempo nele.

Demo

O primeiro terminal é o cliente, seguido do log do servidor.

chat-client

Neste exemplo, Gabriel e João entram no Chat Relay para bater um papo. João então cria o canal &redes para conversar com seus amigos. De repente, Joel(pseudonimo para Mathias), invade o canal e começa a pertubadoramente floodar o canal com a mensagem "Eu sou o Joel". Em um ato heróico, João usa o comando /help para ver seus comandos e então decide mutar Joel.

Desenvolvido por:

GabrielVanLoon Gabriel van Loon Bode da Costa Dourado Fuentes Rojas
Math-O5 Mathias Fernandes Duarte Coelho
JNagasava Joao Ricardo Minoru Nagasava

Compilando e Executando

Inicialmente, o servidor é compilado com make server e executado com make server_run, similarmente o cliente: make client make client_run; ambos a partir da pasta root do projeto. Para mais detalhes, client_src e server_src contém melhores explicações de como proceder seguramente.

Executando em outras máquinas

Para excutar em outras máquinas, você pode usar uma VPN ou o ssh tunneling. Para fazer o ssh tunelamento execute primeiro o servidor e então o comando ssh -R relayChatMaster.serveo.net:9002:localhost:9002 serveo.net. Esse comando vai fazer o tunelamento da porta em que seu servidor executa com ajuda do server.net. Agora você pode acessar remotamente o servidor. Para se conectar, bastar executar a aplicação do cliente em qualquer máquina e usar /connect relayChatMaster.serveo.net.

Lista de comandos

Users:
• /connect - Estabelece a conexão com o servidor;
• /quit - O cliente fecha a conexão e fecha a aplicação;
• /ping - O servidor retorna "pong"assim que receber a mensagem;
• /join nomeCanal - Entra no canal;
• /nickname apelidoDesejado - O cliente passa a ser reconhecido pelo apelido especificado;
• /ping - O servidor retorna "pong"assim que receber a mensagem.

Admin:
• /kick nomeUsurio - Fecha a conexão de um usuário especificado;
• /mute nomeUsurio - Faz com que um usuário não possa enviar mensagens neste canal;
• /unmute nomeUsurio - Retira o mute de um usuário;
• /whois nomeUsurio - Retorna o endereço IP do usuário apenas para o administrador;
• /invite nomeUsuario - convida o usuário para o canal.

Nas pastas...

  • client_src executaveis, esquemas e README documentando-os. O "makeClient" facilita o teste de clientes.
  • server_src executaveis, fluxograma e README documentando-os.
  • assets Todas imagens e arquivos visuais.
  • socket_example Outras versões feitas para testes apenas.

A seguir demo e imagens inéditas de testes e dados.

Testando com htop

Obs: o status R(Running) e S(Sleeping)

Nas imagens é possível ver CPU, MEM e qual thread está correndo. Podemos ver resultados otimistas.

client client

Ambientes testados

OS: Fedora 30.x
gcc version 9.2.1 20190827 (Red Hat 9.2.1-1)
g++ (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1)

OS: Ubuntu 18.04.4 LTS x86_64
Shell: bash 4.4.20
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0