summaryrefslogtreecommitdiff
path: root/src/chat-server/chatchannel.cpp
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-08-13 15:31:48 +0000
committerDavid Athay <ko2fan@gmail.com>2008-08-13 15:31:48 +0000
commit67cb713c0fcd65f9f842c589c7e1c08f9af597f0 (patch)
tree408d79af670e143211deb311dc6aa291fbda9034 /src/chat-server/chatchannel.cpp
parent4e800b21494755958b0e30bba9045cee204b1a76 (diff)
downloadmanaserv-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.cpp51
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;
+}