Skip to content

Simple internet relay chat implementation made with learning purposes

License

Notifications You must be signed in to change notification settings

natan-dot-com/Internet-Relay-Chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Redes de Computadores - Internet Relay Chat

Este trabalho pode ser acessado pelo Github, vídeo.

Autores

  • Natan Henrique Sanches (11795680)
  • Gabriel da Cunha Dertoni (11795717)
  • Álvaro José Lopes (10873365)

Introdução

Neste projeto, foi implementado um modelo de IRC (Internet Relay Chat) simples, baseado na interação entre diversos clientes e um servidor. O projeto foi feito com caráter pedagógico para a disciplina de Redes de Computadores, utilizando linguagem C++ e bibliotecas como sys/socket.h, arpa/inet.h e netinet/in.h (para permitir a transmissão de mensagens cliente-servidor), além da biblioteca ncurses.h (para criação da interface do cliente).

Implementação

O servidor pôde ser implementado em uma única thread, através da utilização do sistema de gerenciamento de eventos em um descritor de arquivos (poll). Além disso, o cliente foi implementado com duas threads, encarregadas de enviar mensagens (sender) e receber mensagens (receiver) do servidor. A thread sender envia mensagens por demanda ao servidor central, enquanto a thread receiver constantemente lê o buffer de mensagens e, se houver alguma ainda não entregue, ela é exibida na tela.

Procedimentos de Execução

O projeto foi testado nos sistemas operacionais Debian 11 'Bullseye' e Windows 11, além de ter sido compilado (em ambos os casos) com G++11.

# Compila tanto o servidor, quanto o cliente.
make

# Roda o sevidor
./build/server/main

# Roda o client
./build/client/main <ip_do_servidor> 8080
#                                    ^^^^~~~ porta para se conectar.

Comandos

Neste projeto, foram implementados os comandos do protocolo RFC 1459. Os comandos requisitados no enunciado foram, portanto, codificados em função dos comandos do RFC 1459.

Lista de Comandos

Comando Descrição Permissão
/connect Estabelece a conexão com o servidor Todos os usuários
/quit Encerra a conexão do cliente com o servidor Todos os usuários
/ping Checa o estado da conexão com o servidor. Retorna pong se estiver conectado Todos os usuários
/join <Nome Canal> Entra (ou cria, se não existir) no canal <NomeCanal> Todos os usuários
/nickname <Apelido> Atribui um determinado apelido para o cliente autor Todos os usuários
/user <Apelido> <Nome Real> Atribui informações a um cliente com determinado apelido Todos os usuários
/kick <Apelido> Expulsa um determinado usuário do servidor Somente administrador
/mute <Apelido> Proíbe um determinado usuário de mandar mensagens Somente administrador
/unmute <Apelido> Restaura a permissão de um determinado usuário de mandar mensagens Somente administrador
/whois <Apelido> Visualiza informações (incluindo o IP) de determinado usuário Somente administrador

Em nossa implementação, o comando connect é executado automaticamente por parte do cliente. Além disso, o comando nickname é mandatório e deve ser o primeiro utilizado após estabelecimento da conexão. Seguido dele, deve ser utilizado o comando user para dar informações sobre o cliente que está se conectando. Após isso, o usuário terá acesso ao restante dos comandos.

About

Simple internet relay chat implementation made with learning purposes

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published