summaryrefslogtreecommitdiff
path: root/src/chat-server/chatchannelmanager.cpp
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-04-01 17:10:01 +0000
committerDavid Athay <ko2fan@gmail.com>2008-04-01 17:10:01 +0000
commit7d05004c8264eeee8aa1e9a5f0bc6a1126bc793a (patch)
tree15c075dd93f7099ad5e1e791f68f38aad758082d /src/chat-server/chatchannelmanager.cpp
parent7e9bb1451b05480f30be2edfd0b19e7b1e487932 (diff)
downloadmanaserv-7d05004c8264eeee8aa1e9a5f0bc6a1126bc793a.tar.gz
manaserv-7d05004c8264eeee8aa1e9a5f0bc6a1126bc793a.tar.bz2
manaserv-7d05004c8264eeee8aa1e9a5f0bc6a1126bc793a.tar.xz
manaserv-7d05004c8264eeee8aa1e9a5f0bc6a1126bc793a.zip
Consolidated public and private channels into one,
which also includes guild channels. Channels now have a joinable field, which is true for channels that are created by users, and false for guild channels. Chatting in guild channels now works, and non-guild members can no longer join guild channels
Diffstat (limited to 'src/chat-server/chatchannelmanager.cpp')
-rw-r--r--src/chat-server/chatchannelmanager.cpp88
1 files changed, 39 insertions, 49 deletions
diff --git a/src/chat-server/chatchannelmanager.cpp b/src/chat-server/chatchannelmanager.cpp
index 11fa059f..36b8873b 100644
--- a/src/chat-server/chatchannelmanager.cpp
+++ b/src/chat-server/chatchannelmanager.cpp
@@ -29,7 +29,7 @@
#include "account-server/dalstorage.hpp"
#include "chat-server/chatclient.hpp"
-ChatChannelManager::ChatChannelManager()
+ChatChannelManager::ChatChannelManager() : mNextChannelId(0)
{
// Load stored public chat channels from db
mChatChannels = storage->getChannelList();
@@ -42,62 +42,20 @@ ChatChannelManager::~ChatChannelManager()
}
int
-ChatChannelManager::registerPublicChannel(const std::string &channelName,
+ChatChannelManager::createNewChannel(const std::string &channelName,
const std::string &channelAnnouncement,
- const std::string &channelPassword)
+ const std::string &channelPassword,
+ bool joinable)
{
- int channelId = 1;
- for (ChatChannelIterator i = mChatChannels.begin(),
- end = mChatChannels.end(); i != end; ++i)
- {
- // We seek the highest channelId in the public range
- if (channelId <= i->first &&
- i->first < MAX_PUBLIC_CHANNELS_RANGE)
- {
- channelId = i->first + 1;
- }
- }
-
- // Too many channels registered
- if (channelId >= MAX_PUBLIC_CHANNELS_RANGE)
- return 0;
+ int channelId = nextUsable();
// Register channel
mChatChannels.insert(std::make_pair(channelId,
ChatChannel(channelId,
channelName,
channelAnnouncement,
- channelPassword)));
- return channelId;
-}
-
-
-int
-ChatChannelManager::registerPrivateChannel(const std::string &channelName,
- const std::string &channelAnnouncement,
- const std::string &channelPassword)
-{
- int channelId = MAX_PUBLIC_CHANNELS_RANGE;
-
- for (ChatChannelIterator i = mChatChannels.begin(),
- end = mChatChannels.end(); i != end; ++i)
- {
-
- // We seek the highest channelId in the private range
- if (channelId <= i->first)
- channelId = i->first + 1;
- }
-
- // Too many channels registered
- if (channelId >= MAX_PRIVATE_CHANNELS_RANGE)
- return 0;
-
- // Register Channel
- mChatChannels.insert(std::make_pair(channelId,
- ChatChannel(channelId,
- channelName,
- channelAnnouncement,
- channelPassword)));
+ channelPassword,
+ joinable)));
return channelId;
}
@@ -107,6 +65,7 @@ bool ChatChannelManager::removeChannel(int channelId)
if (i == mChatChannels.end()) return false;
i->second.removeAllUsers();
mChatChannels.erase(i);
+ mChannelsNoLongerUsed.push_back(channelId);
return true;
}
@@ -145,6 +104,20 @@ ChatChannel* ChatChannelManager::getChannel(int channelId)
return NULL;
}
+ChatChannel* ChatChannelManager::getChannel(const std::string &name)
+{
+ ChatChannelIterator i_end = mChatChannels.end();
+ for (ChatChannelIterator i = mChatChannels.begin(); i != i_end; ++i)
+ {
+ if (i->second.getName() == name)
+ {
+ return &(i->second);
+ }
+ }
+
+ return NULL;
+}
+
void ChatChannelManager::removeUserFromAllChannels(ChatClient *user)
{
// Local copy as they will be destroyed under our feet.
@@ -161,3 +134,20 @@ bool ChatChannelManager::channelExists(int channelId)
{
return mChatChannels.find(channelId) != mChatChannels.end();
}
+
+int ChatChannelManager::nextUsable()
+{
+ int channelId = 0;
+
+ if (mChannelsNoLongerUsed.size() > 0)
+ {
+ channelId = mChannelsNoLongerUsed[0];
+ mChannelsNoLongerUsed.pop_front();
+ }
+ else
+ {
+ channelId = ++mNextChannelId;
+ }
+
+ return channelId;
+}