/******************************************************************************/ /* */ /* ::: :::::::: */ /* message.cpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: vvaas +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/01/21 11:38:34 by maldavid #+# #+# */ /* Updated: 2024/02/05 16:09:12 by maldavid ### ########.fr */ /* */ /******************************************************************************/ #include #include #include #include namespace irc { namespace details { void split(const std::string& s, std::vector& elems) { std::string token; for(std::string::const_iterator it = s.begin(); it != s.end();) { if(std::isspace(*it)) { elems.push_back(token); token.clear(); while(std::isspace(*it) && it != s.end()) it++; } else { token.push_back(*it); it++; } } bool isempty = true; for(std::string::const_iterator it = token.begin(); it != token.end(); ++it) { if(!std::isspace(*it)) { isempty = false; break; } } if(!isempty) elems.push_back(token); } std::vector split(const std::string& s) { std::vector elems; split(s, elems); return elems; } } Message::Message(unstd::SharedPtr client, const std::string& msg) : _raw_msg(msg), _client(client) { std::vector tokens = details::split(msg); if(tokens.empty()) return; _command = tokens[0]; _tokens = tokens; bool reason = false; for(std::vector::iterator it = tokens.begin() + 1; it < tokens.end(); ++it) { if((*it)[0] == ':') reason = true; if(!reason) _args.push_back(*it); else { if((*it)[0] == ':') it->erase(it->begin()); _reason.append(*it); _reason.push_back(' '); } } if (!_reason.empty()) _reason.erase(_reason.end() - 1); } Message::~Message() {} }