summaryrefslogblamecommitdiff
path: root/src/chat-server/chatchannel.hpp
blob: 44914324b139640c67c94cbd085d6d1923727781 (plain) (tree)

























                                                                             
                 
                 
 







                                                                               



                                                                            








                                                      


                                                                               





                                                               

                                            




                                                         





                                     












































                                                                     
                                      


                                                          
                                              





                                                            
                                                 



                                                             
                              

            
                                                                     





                                                                              


      
/*
 *  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 <string>
#include <vector>

/**
 * 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>b_lindeijer:</b> It would be nicer when some more logic could be
 *       placed in this class to remove some weight from the ChatHandler.
 *       Referencing ChatClient instances would also be nicer than to store
 *       only the names of the characters.
 */
class ChatChannel
{
    public:
        typedef std::vector<std::string> ChannelUsers;

        /**
         * Constructor.
         *
         * @todo <b>b_lindeijer:</b> I would say a channel can be defined as
         *       private when a non-empty password is set, in which case we can
         *       get rid of the privacy parameter.
         *
         * @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(short id,
                    const std::string &name,
                    const std::string &announcement = "",
                    const std::string &password = "",
                    bool privacy = false);

        /**
         * Get the ID of the channel.
         */
        short 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 mPrivate; }

        /**
         * Sets the name of the channel.
         */
        void setName(const std::string &channelName);

        /**
         * Sets the announcement string of the channel.
         */
        void setAnnouncement(const std::string &channelAnnouncement);

        /**
         * Sets the password of the channel.
         */
        void setPassword(const std::string &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(const std::string &name);

        /**
         * Removes a user from the channel.
         *
         * @return whether the user was successfully removed
         */
        bool removeUser(const std::string &name);

        /**
         * Empties a channel from its users (admin included).
         */
        void removeAllUsers();

    private:
        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. */

        bool mPrivate;                 /**< Whether the channel is private. */
};

#endif