# ft_irc parsing module Partie parsing C++98 pour `ft_irc`. ## Ce que ça fait - accumule les données TCP reçues dans un buffer par client ; - extrait les lignes complètes terminées par `\r\n` ou `\n` ; - parse une ligne IRC en : - prefix optionnel ; - command ; - params ; - trailing param après `:`, qui peut contenir des espaces ; - normalise les commandes en uppercase ; - fournit une validation minimale du nombre de paramètres. ## Ce que ça ne fait volontairement pas Le parser ne doit pas gérer la logique métier : - vérifier le password ; - vérifier si le nickname existe déjà ; - créer les channels ; - vérifier les permissions operator ; - appliquer les modes ; - envoyer les numeric replies. Tout ça appartient aux handlers de commandes. ## Utilisation dans ton Client Chaque client doit avoir son propre `ParseBuffer`. Exemple : ```cpp // Dans ta classe Client ParseBuffer _parseBuffer; ``` Quand `poll()` indique que le fd client est lisible : ```cpp char buf[4096]; ssize_t n = recv(clientFd, buf, sizeof(buf), 0); if (n <= 0) { // déconnexion ou erreur } else { client.getParseBuffer().append(buf, n); std::vector messages = client.getParseBuffer().extractMessages(); for (size_t i = 0; i < messages.size(); ++i) { IrcMessage &msg = messages[i]; if (!msg.isValid()) { // selon l'erreur: // - ignorer // - répondre ERR_UNKNOWNCOMMAND // - fermer si line too long continue; } // dispatcher.handle(client, msg); } } ``` ## Compilation test ```bash c++ -Wall -Wextra -Werror -std=c++98 \ -Iincludes \ srcs/IrcMessage.cpp \ srcs/IrcParser.cpp \ srcs/ParseBuffer.cpp \ srcs/CommandValidator.cpp \ test/main.cpp \ -o parser_test ./parser_test ``` ## Format IRC géré ```txt COMMAND param1 param2 :trailing avec espaces ``` Exemples : ```txt PASS secret NICK jeremy USER jeremy 0 * :Jeremy Real Name JOIN #42 PRIVMSG #42 :salut les gars MODE #42 +it MODE #42 +k password KICK #42 bob :raison du kick ``` ## Intégration recommandée Architecture propre : ```txt Client - fd - nick - username - ParseBuffer Server - poll loop - accept - recv - donne les IrcMessage au dispatcher CommandDispatcher - map command -> handler - PASS/NICK/USER/JOIN/PRIVMSG/MODE/etc. Parser - aucune logique métier ```