summaryrefslogtreecommitdiff
path: root/src/chat-server/chatchannelmanager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/chat-server/chatchannelmanager.h')
-rw-r--r--src/chat-server/chatchannelmanager.h131
1 files changed, 131 insertions, 0 deletions
diff --git a/src/chat-server/chatchannelmanager.h b/src/chat-server/chatchannelmanager.h
new file mode 100644
index 00000000..b7f19eee
--- /dev/null
+++ b/src/chat-server/chatchannelmanager.h
@@ -0,0 +1,131 @@
+/*
+ * 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 CHATCHANNELMANAGER_H
+#define CHATCHANNELMANAGER_H
+
+#include <list>
+#include <map>
+#include <deque>
+
+#include "chat-server/chatchannel.h"
+
+/**
+ * The chat channel manager takes care of registering and removing public and
+ * private chat channels. Every channel gets a unique channel ID.
+ */
+class ChatChannelManager
+{
+ public:
+ ChatChannelManager();
+ ~ChatChannelManager();
+
+ /**
+ * Create a new chat channel.
+ *
+ * @return the ID of the registered channel
+ */
+ int createNewChannel(const std::string &channelName,
+ const std::string &channelAnnouncement,
+ const std::string &channelPassword,
+ bool joinable);
+
+ /**
+ * Try to create a new public channel with the given name.
+ *
+ * @return true if created successfully, false otherwise.
+ */
+ bool tryNewPublicChannel(const std::string &name);
+
+ /**
+ * Remove a channel.
+ */
+ bool removeChannel(int channelId);
+
+ /**
+ * Returns a list containing all public channels.
+ *
+ * @return a list of all public channels
+ */
+ std::list<const ChatChannel*> getPublicChannels() const;
+
+ /**
+ * Get the id of a channel from its name.
+ *
+ * @return the id of the channel, 0 if it was unsuccessful.
+ */
+ int getChannelId(const std::string &channelName) const;
+
+ /**
+ * Returns the chat channel with the given channel ID.
+ *
+ * @return The chat channel, or NULL when it doesn't exist.
+ */
+ ChatChannel *getChannel(int channelId);
+
+ /**
+ * Returns the chat channel with the given channel name.
+ *
+ * @return The chat channel, or NULL when it doesn't exist.
+ */
+ ChatChannel *getChannel(const std::string &name);
+
+ /**
+ * Remove a user from all channels. Used at logout.
+ *
+ * @see ChatChannel::removeUserFromChannel
+ */
+ void removeUserFromAllChannels(ChatClient *);
+
+ /**
+ * Set the topic of a channel.
+ *
+ * @param topic the new topic of the given channel
+ */
+ void setChannelTopic(int channelId, const std::string &name);
+
+ /**
+ * Returns whether a channel exists.
+ *
+ * @param channelId a channel ID
+ */
+ bool channelExists(int channelId) const;
+ bool channelExists(const std::string &channelName) const;
+
+ /**
+ * Get next usable channel ID
+ */
+ int nextUsable();
+
+ private:
+ typedef std::map<unsigned short, ChatChannel> ChatChannels;
+
+ /**
+ * The map keeping all the chat channels. The channel id must be
+ * unique.
+ */
+ ChatChannels mChatChannels;
+ int mNextChannelId;
+ std::deque<int> mChannelsNoLongerUsed;
+};
+
+extern ChatChannelManager *chatChannelManager;
+
+#endif