Servidor IRC em C++98, não bloqueante, baseado em poll(), seguindo o escopo obrigatório do projeto ft_irc da 42.
Implementar um servidor compatível com cliente IRC real, com:
- múltiplos clientes simultâneos;
- autenticação por senha;
- canais;
- comandos de operador;
- troca de mensagens privada e em canal.
- Linguagem: C++98
- I/O multiplexado:
poll() - Sockets em modo não bloqueante
- Sem bibliotecas externas
- Makefile com regras:
all,clean,fclean,re
makeBinário gerado: ./ircserv
./ircserv <port> <password>Exemplo:
./ircserv 6667 pass- Registro/autenticação:
PASS,NICK,USER,QUIT - Básicos:
PING,WHOIS,LIST,NAMES - Canais:
JOIN,PART,TOPIC,MODE,INVITE,KICK - Mensagens:
PRIVMSG(usuário e canal)
+i: invite-only+t: tópico restrito a operador+k: senha do canal+o: operador+l: limite de usuários
Server: socket TCP, loop principal compoll(), roteamento de comandos, replies/erros IRC.Client: estado de autenticação, dados de usuário, buffer de entrada e fila de saída.Channel: membros, operadores, convidados, modos de canal, broadcast.IRCMessage: parser de comandos IRC com suporte a parâmetros e trailing.
verify_irc.sh: smoke/integration test comnc(registro, JOIN, PRIVMSG, INVITE, MODE, TOPIC, KICK, PING e comando parcial).irc_tester.py: suíte de testes em Python para validar fluxo de comandos e respostas.
Execução:
./verify_irc.sh
python3 irc_tester.py- Subir servidor:
./ircserv 6667 pass - Conectar 2 clientes (ex.:
nc 127.0.0.1 6667) - Registrar cada cliente com:
PASS,NICK,USER - Criar/entrar em canal:
JOIN #test - Testar mensagem:
PRIVMSG #test :hello - Testar modos/operação:
MODE #test +i,INVITE,TOPIC,KICK,MODE #test +k segredo
include/
Server.hpp
Client.hpp
Channel.hpp
IRCMessage.hpp
src/
Server.cpp
Client.cpp
Channel.cpp
IRCMessage.cpp
main.cpp
Makefile