/* * The Mana World Server * Copyright 2004 The Mana World Development Team * * This file is part of The Mana World. * * The Mana World is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * The Mana World is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with The Mana World; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id$ */ #ifndef _TMWSERV_CHATCHANNEL_H_ #define _TMWSERV_CHATCHANNEL_H_ #include #include class ChatClient; /** * A chat channel. Optionally a channel is private, in which case a password is * required to join it. * * No logic is currently associated with a chat channel except for making sure * that no user joins the channel twice and checking that a user who leaves * actually existed in the channel. * * @todo b_lindeijer: It would be nicer when some more logic could be * placed in this class to remove some weight from the ChatHandler. */ class ChatChannel { public: typedef std::vector< ChatClient * > ChannelUsers; /** * Constructor. * * @param name the name of the channel. * @param announcement a welcome message. * @param password password (for private channels). * @param privacy whether this channel is private. */ ChatChannel(int id, const std::string &name, const std::string &announcement = std::string(), const std::string &password = std::string()); /** * Get the ID of the channel. */ int getId() const { return mId; } /** * Get the name of the channel. */ const std::string& getName() const { return mName; } /** * Get the announcement string of the channel. */ const std::string& getAnnouncement() const { return mAnnouncement; } /** * Get the password of the channel. */ const std::string& getPassword() const { return mPassword; } /** * Returns whether this channel is private. */ bool isPrivate() const { return !mPassword.empty(); } /** * Sets the name of the channel. */ void setName(const std::string &channelName) { mName = channelName; } /** * Sets the announcement string of the channel. */ void setAnnouncement(const std::string &channelAnnouncement) { mAnnouncement = channelAnnouncement; } /** * Sets the password of the channel. */ void setPassword(const std::string &channelPassword) { mPassword = channelPassword; } /** * Gets the list of the users registered in the channel. */ const ChannelUsers& getUserList() const { return mRegisteredUsers; } /** * Adds a user to the channel. * * @return whether the user was successfully added */ bool addUser(ChatClient *); /** * Removes a user from the channel. * * @return whether the user was successfully removed */ bool removeUser(ChatClient *); /** * Empties a channel from its users (admin included). */ void removeAllUsers(); private: unsigned short mId; /**< The ID of the channel. */ std::string mName; /**< The name of the channel. */ std::string mAnnouncement; /**< Welcome message. */ std::string mPassword; /**< The channel password. */ ChannelUsers mRegisteredUsers; /**< Users in this channel. */ }; #endif