vitor-san / irc-redes

Projeto da Disciplina SSC0142 - Redes de Computadores (2020), no qual implementaremos uma versão simplificada do protocolo IRC (Internet Relay Chat). Sua definição pode ser encontrada em: https://tools.ietf.org/html/rfc1459.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

IRC - Redes

Projeto da Disciplina SSC0142 - Redes de Computadores (2020), no qual implementaremos uma versão simplificada do protocolo IRC (Internet Relay Chat). Sua definição pode ser encontrada em: https://tools.ietf.org/html/rfc1459. com uma interface gráfica

Autores

  • Vitor Santana Cordeiro, 10734345
  • Marcelo Isaias de Moraes Junior, 10550218
  • Joao Vitor Silva Ramos, 10734769

O código foi compilado utilizando o compilador gcc versão 7.5.0, com target = Linux GNU x86_64. O código é feito em C++11, usando a flag -std=c++11 na compilação.

Como usar

Para testar o código, compile-o com o comando make all.

Depois, digite ./server em um terminal. O servidor será iniciado na porta 9001 (essa configuração pode ser mudada por meio do #define PORT no arquivo server.cpp).

Primeiramente, caso queira utilizar da interface gráfica no cliente, é necessário apenas digitar o comando python3 client.py. Caso contrário, para iniciar apenas o programa cliente no terminal, simplesmente execute o comando ./client. Siga as intruções dadas pelo terminal e conecte a um dos servidores disponíveis no arquivo dns.txt. Você pode adicionar novos servidores por meio do mesmo.

Para permitir conexões fora da rede local, você deve ou fazer port-forwarding em seu ponto de acesso ou rodar o seguinte comando em outro terminal:

ssh -R 9001:localhost:9001 serveo.net.

Ele comecará um tunelamento SSH reverso que te permitirá acessar o servidor pelo DNS main.ggc.
Caso decidir fazer port-forwarding, lembre-se de registrar seu IP e porta no arquivo dns.txt.

Comandos disponíveis

  • /list: Lista todos os servidores conhecidos pelo nosso "DNS" (arquivo dns.txt);
  • /connect: Estabelece a conexão com o servidor especificado;
  • /ping: O servidor retorna "pong" assim que receber a mensagem;
  • /nickname: Muda o nickname atual do cliente para o novo especificado;
  • /join: Entra no canal especificado;
  • /mute: (Comando de administrador) Impede o usuário especificado de mandar mensagens no canal;
  • /unmute: (Comando de administrador) Retira o estado criado pelo /mute;
  • /kick: (Comando de administrador) Expulsa o usuário especificado do canal atual e o manda para o canal #general;
  • /invite: (Comando de administrador) manda um convite para o usuário especificado entrar no canal do administrador (caso o canal seja invite-only, só usuários que receberam esse convite podem entrar);
  • /whois: (Comando de administrador) Recebe o IP do usuário especificado (esse comando só funciona se o servidor NÃO estiver utilizando tunelamento SSH, caso contrário sempre mostrará o IP 127.0.0.1 para qualquer usuário);
  • /quit: O cliente fecha a conexão e fecha a aplicação.

Para mandar mensagens no servidor, apenas digite normalmente no terminal (ou caso esteja utilizando a interface gráfica, digite na área de texto inferior) e aperte ENTER.

Interface gráfica

Para utilizar a interface gráfica, o programa python3 (versão mínima 3.7) e a sua biblioteca tkinter devem estar ser instalados (e atualizados). Caso alguma outra biblioteca falte no seu dispositivo (o que é muito improvável, já que são bibliotecas padrões do Python), por favor as instale. Para encerrar o programa, você precisa primeiro dar o comando /quit para o servidor e, só depois, fechar a interface no "X". Se tentar fechar no X primeiro, você terá que matar forçadamente o terminal que está rodando a interface, já que a thread de receber mensagens da interface não irá terminar naturalmente.

OBS: Não conseguimos fazer com que o seu input "cru" ficasse de fora da conversa na interface, então se você mandar a mensagem "oi" receberá na parte dos outputs: oi seunome: oi

About

Projeto da Disciplina SSC0142 - Redes de Computadores (2020), no qual implementaremos uma versão simplificada do protocolo IRC (Internet Relay Chat). Sua definição pode ser encontrada em: https://tools.ietf.org/html/rfc1459.

License:MIT License


Languages

Language:C++ 93.3%Language:Python 6.2%Language:Makefile 0.4%