diff options
author | David Athay <ko2fan@gmail.com> | 2008-04-01 17:10:01 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-04-01 17:10:01 +0000 |
commit | 7d05004c8264eeee8aa1e9a5f0bc6a1126bc793a (patch) | |
tree | 15c075dd93f7099ad5e1e791f68f38aad758082d /src/chat-server/chatchannelmanager.cpp | |
parent | 7e9bb1451b05480f30be2edfd0b19e7b1e487932 (diff) | |
download | manaserv-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.cpp | 88 |
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; +} |