diff options
author | David Athay <ko2fan@gmail.com> | 2008-08-13 15:31:48 +0000 |
---|---|---|
committer | David Athay <ko2fan@gmail.com> | 2008-08-13 15:31:48 +0000 |
commit | 67cb713c0fcd65f9f842c589c7e1c08f9af597f0 (patch) | |
tree | 408d79af670e143211deb311dc6aa291fbda9034 /src/chat-server/chatchannel.cpp | |
parent | 4e800b21494755958b0e30bba9045cee204b1a76 (diff) | |
download | manaserv-67cb713c0fcd65f9f842c589c7e1c08f9af597f0.tar.gz manaserv-67cb713c0fcd65f9f842c589c7e1c08f9af597f0.tar.bz2 manaserv-67cb713c0fcd65f9f842c589c7e1c08f9af597f0.tar.xz manaserv-67cb713c0fcd65f9f842c589c7e1c08f9af597f0.zip |
Added permission levels to guilds, and operator permissions to channels.
Diffstat (limited to 'src/chat-server/chatchannel.cpp')
-rw-r--r-- | src/chat-server/chatchannel.cpp | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/src/chat-server/chatchannel.cpp b/src/chat-server/chatchannel.cpp index 96de7335..a0317df9 100644 --- a/src/chat-server/chatchannel.cpp +++ b/src/chat-server/chatchannel.cpp @@ -22,6 +22,7 @@ */ #include <algorithm> +#include <sstream> #include "chat-server/chatchannel.hpp" #include "chat-server/chatclient.hpp" @@ -41,12 +42,31 @@ ChatChannel::ChatChannel(int id, bool ChatChannel::addUser(ChatClient *user) { + // First user is the channel owner + if (mRegisteredUsers.size() < 1) + { + mOwner = user->characterName; + setUserMode(user, 'o'); + } + // Check if the user already exists in the channel ChannelUsers::const_iterator i = mRegisteredUsers.begin(), i_end = mRegisteredUsers.end(); - if (std::find(i, i_end, user) != i_end) return false; + if (std::find(i, i_end, user) != i_end) + return false; + mRegisteredUsers.push_back(user); user->channels.push_back(this); + + // set user as logged in + setUserMode(user, 'l'); + + // if owner has rejoined, give them ops + if (user->characterName == mOwner) + { + setUserMode(user, 'o'); + } + return true; } @@ -58,6 +78,8 @@ bool ChatChannel::removeUser(ChatClient *user) mRegisteredUsers.erase(i); std::vector< ChatChannel * > &channels = user->channels; channels.erase(std::find(channels.begin(), channels.end(), this)); + std::map<ChatChannel*,std::string> &modes = user->userModes; + modes.erase(modes.begin(), modes.end()); return true; } @@ -68,6 +90,8 @@ void ChatChannel::removeAllUsers() { std::vector< ChatChannel * > &channels = (*i)->channels; channels.erase(std::find(channels.begin(), channels.end(), this)); + std::map<ChatChannel*,std::string> &modes = (*i)->userModes; + modes.erase(modes.begin(), modes.end()); } mRegisteredUsers.clear(); } @@ -76,3 +100,28 @@ bool ChatChannel::canJoin() const { return mJoinable; } + +void ChatChannel::setUserMode(ChatClient *user, unsigned char mode) +{ + std::map<ChatChannel*, std::string>::iterator itr = user->userModes.find(this); + if (itr != user->userModes.end()) + { + itr->second += mode; + } + else + { + std::stringstream ss; ss << mode; + user->userModes.insert(std::pair<ChatChannel*, std::string>(this, ss.str())); + } +} + +std::string ChatChannel::getUserMode(ChatClient *user) +{ + std::map<ChatChannel*, std::string>::iterator itr = user->userModes.find(this); + if (itr != user->userModes.end()) + { + return itr->second; + } + + return 0; +} |