From 7f580dbc0e529d200662e676119a3dcb966f67f9 Mon Sep 17 00:00:00 2001 From: Florent Le Coz Date: Sat, 2 Nov 2013 16:05:55 +0100 Subject: Add irc_message.hpp --- src/libirc/irc_message.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++ src/libirc/irc_message.hpp | 28 ++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/libirc/irc_message.cpp create mode 100644 src/libirc/irc_message.hpp (limited to 'src') diff --git a/src/libirc/irc_message.cpp b/src/libirc/irc_message.cpp new file mode 100644 index 0000000..fc691b4 --- /dev/null +++ b/src/libirc/irc_message.cpp @@ -0,0 +1,65 @@ +#include +#include + +IrcMessage::IrcMessage(std::string&& line) +{ + std::string::size_type pos; + + // optional prefix + if (line[0] == ':') + { + pos = line.find(" "); + this->prefix = line.substr(1, pos); + line = line.substr(pos + 1, std::string::npos); + } + // command + pos = line.find(" "); + this->command = line.substr(0, pos); + line = line.substr(pos + 1, std::string::npos); + // arguments + do + { + if (line[0] == ':') + { + this->arguments.emplace_back(line.substr(1, std::string::npos)); + break ; + } + pos = line.find(" "); + this->arguments.emplace_back(line.substr(0, pos)); + line = line.substr(pos + 1, std::string::npos); + } while (pos != std::string::npos); +} + +IrcMessage::IrcMessage(std::string&& prefix, + std::string&& command, + std::vector&& args): + prefix(std::move(prefix)), + command(std::move(command)), + arguments(std::move(args)) +{ +} + +IrcMessage::IrcMessage(std::string&& command, + std::vector&& args): + prefix(), + command(std::move(command)), + arguments(std::move(args)) +{ +} + +IrcMessage::~IrcMessage() +{ +} + +std::ostream& operator<<(std::ostream& os, const IrcMessage& message) +{ + os << "IrcMessage"; + os << "[" << message.command << "]"; + for (const std::string& arg: message.arguments) + { + os << "{" << arg << "}"; + } + if (!message.prefix.empty()) + os << "(from: " << message.prefix << ")"; + return os; +} diff --git a/src/libirc/irc_message.hpp b/src/libirc/irc_message.hpp new file mode 100644 index 0000000..a0bd772 --- /dev/null +++ b/src/libirc/irc_message.hpp @@ -0,0 +1,28 @@ +#ifndef IRC_MESSAGE_INCLUDED +# define IRC_MESSAGE_INCLUDED + +#include +#include +#include + +class IrcMessage +{ +public: + explicit IrcMessage(std::string&& line); + explicit IrcMessage(std::string&& prefix, std::string&& command, std::vector&& args); + explicit IrcMessage(std::string&& command, std::vector&& args); + ~IrcMessage(); + + std::string prefix; + std::string command; + std::vector arguments; + + IrcMessage(const IrcMessage&) = delete; + IrcMessage(IrcMessage&&) = delete; + IrcMessage& operator=(const IrcMessage&) = delete; + IrcMessage& operator=(IrcMessage&&) = delete; +}; + +std::ostream& operator<<(std::ostream& os, const IrcMessage& message); + +#endif // IRC_MESSAGE_INCLUDED -- cgit v1.2.3