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.
O primeiro terminal é o cliente, seguido do log do servidor.
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.
GabrielVanLoon Gabriel van Loon Bode da Costa Dourado Fuentes Rojas
Math-O5 Mathias Fernandes Duarte Coelho
JNagasava Joao Ricardo Minoru Nagasava
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.
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
.
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.
- 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.
Obs: o status R(Running) e S(Sleeping)
Nas imagens é possível ver CPU, MEM e qual thread está correndo. Podemos ver resultados otimistas.
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