summaryrefslogblamecommitdiff
path: root/src/chat-server/chatchannel.hpp
blob: 273b3b76ba7fba3d56725fac4e93383cb23c2fc5 (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
 */

#ifndef _TMWSERV_CHATCHANNEL_H_
#define _TMWSERV_CHATCHANNEL_H_

#include <string>
#include <vector>

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>b_lindeijer:</b> 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(),
                    bool joinable = true);

        /**
         * 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; }

        /**
         * 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();

        /**
         * Get whether a user can join this channel
         */
        bool canJoin() const;

        /**
         * Set user mode
         */
        void setUserMode(ChatClient *, unsigned char mode);

        /**
         * Get user mode
         */
        std::string getUserMode(ChatClient *);

    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. */
        bool mJoinable;                /**< Whether anyone can join. */
        ChannelUsers mRegisteredUsers; /**< Users in this channel. */
        std::string mOwner;             /**< Channel owner character name */
};

#endif