summaryrefslogblamecommitdiff
path: root/src/chat-server/chatchannel.h
blob: 66ffb5b2cf069e4e0c9f44a89dca60806291ee8c (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
  
                   
                                                            
  
                                         
  
                                                                           



                                                                        
                                                                      




                                                                     
                                                                            

   

                     
 
                 
                 
 

                 







                                                                               

                                                                            



                 
                                                         



                       




                                                               
                           
                                            
                                                                    

                                                                

           

                                     
                         


                       

                                       
                                          




                                                      
                                                  








                                              

                                        

                                                    



                                                       

                                                                    



                                            

                                                            



                                                                
                                               


                                    
                                      


                                                          
                                   





                                                            
                                      



                                                             
                              
 




                                                   







                                                           
                                                    
 
            
                                                                     


                                                                       
                                                                       
                                                                     
                                                                            


      
/*
 *  The Mana Server
 *  Copyright (C) 2004-2010  The Mana World Development Team
 *
 *  This file is part of The Mana Server.
 *
 *  The Mana Server 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 Server 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 Server.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef CHATCHANNEL_H
#define 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 *) const;

    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