#pragma once #include #include #include namespace chat { enum class message : char { HELLO = 1, NEPTUN = 2, PASSW = 3, SERVER_DIRECTION = 4, MESSAGE = 5, PING = 6, PONG = 7, BYE = 8, LOGIN = 9, LOGOUT = 10, TERM = 0x7f }; constexpr char byte(message msg) { return static_cast(msg); } class chat_message { message _header; std::string _content; public: chat_message(message header, std::string content = "") : _header(header), _content(content) {} std::string get() const { return byte(_header) + _content + byte(message::TERM); } std::string get_content() const { return _content; } size_t length() const { return sizeof(char) + _content.size() + sizeof(char); } message get_header() const { return _header; } }; inline std::ostream& operator<<(std::ostream& os, const chat_message& msg) { return os << msg.get(); } }