summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2008-04-15 15:42:04 +0000
committerDavid Athay <ko2fan@gmail.com>2008-04-15 15:42:04 +0000
commite2e4ceb9fa8a72ad94853f74724676fff82b15c0 (patch)
tree5336955366e76266f92dbef4da6e632b84714cdf /src/net
parentd4cc1ded15daa0677e710013640c90b1aadd6bd0 (diff)
downloadmana-e2e4ceb9fa8a72ad94853f74724676fff82b15c0.tar.gz
mana-e2e4ceb9fa8a72ad94853f74724676fff82b15c0.tar.bz2
mana-e2e4ceb9fa8a72ad94853f74724676fff82b15c0.tar.xz
mana-e2e4ceb9fa8a72ad94853f74724676fff82b15c0.zip
Added online status of guild members
Diffstat (limited to 'src/net')
-rw-r--r--src/net/chathandler.cpp23
-rw-r--r--src/net/chatserver/chatserver.cpp9
-rw-r--r--src/net/chatserver/chatserver.h2
-rw-r--r--src/net/guildhandler.cpp11
-rw-r--r--src/net/protocol.h2
5 files changed, 45 insertions, 2 deletions
diff --git a/src/net/chathandler.cpp b/src/net/chathandler.cpp
index 4d48865a..d8a228ea 100644
--- a/src/net/chathandler.cpp
+++ b/src/net/chathandler.cpp
@@ -35,6 +35,7 @@
#include "../game.h"
#include "../gui/chat.h"
+#include "../gui/guildwindow.h"
#include "../utils/tostring.h"
@@ -49,6 +50,7 @@ ChatHandler::ChatHandler()
CPMSG_LIST_CHANNELS_RESPONSE,
CPMSG_PUBMSG,
CPMSG_QUIT_CHANNEL_RESPONSE,
+ CPMSG_LIST_CHANNELUSERS_RESPONSE,
/*
SMSG_BEING_CHAT,
SMSG_PLAYER_CHAT,
@@ -106,9 +108,13 @@ void ChatHandler::handleMessage(MessageIn &msg)
channelName = msg.readString();
std::string announcement = msg.readString();
std::vector<std::string> userList;
+ std::string user;
while(msg.getUnreadLength())
{
- userList.push_back(msg.readString());
+ user = msg.readString();
+ if (user == "")
+ break;
+ userList.push_back(user);
}
chatWindow->addChannel(channelId, channelName);
chatWindow->createNewChannelTab(channelName);
@@ -125,6 +131,8 @@ void ChatHandler::handleMessage(MessageIn &msg)
while(msg.getUnreadLength())
{
channelName = msg.readString();
+ if (channelName == "")
+ break;
std::ostringstream numUsers;
numUsers << msg.readInt16();
if(channelName != "")
@@ -164,6 +172,19 @@ void ChatHandler::handleMessage(MessageIn &msg)
chatWindow->removeChannel(channelId);
}
break;
+
+ case CPMSG_LIST_CHANNELUSERS_RESPONSE:
+ channelName = msg.readString();
+ while(msg.getUnreadLength())
+ {
+ userNick = msg.readString();
+ if (userNick == "")
+ {
+ break;
+ }
+ guildWindow->setOnline(channelName, userNick, true);
+ }
+ break;
/*
// Received speech from being
case SMSG_BEING_CHAT:
diff --git a/src/net/chatserver/chatserver.cpp b/src/net/chatserver/chatserver.cpp
index 93fdc828..67cb5796 100644
--- a/src/net/chatserver/chatserver.cpp
+++ b/src/net/chatserver/chatserver.cpp
@@ -128,3 +128,12 @@ void Net::ChatServer::getChannelList()
connection->send(msg);
}
+
+void Net::ChatServer::getUserList(const std::string &channel)
+{
+ MessageOut msg(PCMSG_LIST_CHANNELUSERS);
+
+ msg.writeString(channel);
+
+ connection->send(msg);
+}
diff --git a/src/net/chatserver/chatserver.h b/src/net/chatserver/chatserver.h
index c4e0003d..b49d0c9e 100644
--- a/src/net/chatserver/chatserver.h
+++ b/src/net/chatserver/chatserver.h
@@ -54,6 +54,8 @@ namespace Net
void getChannelList();
+ void getUserList(const std::string &channel);
+
}
}
diff --git a/src/net/guildhandler.cpp b/src/net/guildhandler.cpp
index 494dcdc0..fd23546c 100644
--- a/src/net/guildhandler.cpp
+++ b/src/net/guildhandler.cpp
@@ -99,20 +99,30 @@ void GuildHandler::handleMessage(MessageIn &msg)
if(msg.readInt8() == ERRMSG_OK)
{
std::string guildMember;
+ std::string guildName;
Guild *guild;
+
short guildId = msg.readInt16();
guild = player_node->getGuild(guildId);
+
if (!guild)
return;
+
+ guildName = guild->getName();
+
while(msg.getUnreadLength())
{
guildMember = msg.readString();
if(guildMember != "")
{
guild->addMember(guildMember);
+ guildWindow->setOnline(guildName, guildMember, false);
}
}
+
guildWindow->updateTab();
+
+ Net::ChatServer::getUserList(guildName);
}
} break;
@@ -126,6 +136,7 @@ void GuildHandler::handleMessage(MessageIn &msg)
if (guild)
{
guild->addMember(guildMember);
+ guildWindow->setOnline(guild->getName(), guildMember, false);
}
guildWindow->updateTab();
} break;
diff --git a/src/net/protocol.h b/src/net/protocol.h
index 748a4e11..79e1f2ca 100644
--- a/src/net/protocol.h
+++ b/src/net/protocol.h
@@ -171,7 +171,7 @@ enum {
CPMSG_USERJOINED = 0x0450, // W channel, S name
CPMSG_USERLEFT = 0x0451, // W channel, S name
PCMSG_LIST_CHANNELUSERS = 0x0460, // S channel
- CPMSG_LIST_CHANNELUSERS_RESPONSE = 0x0461, // S users
+ CPMSG_LIST_CHANNELUSERS_RESPONSE = 0x0461, // S channel, S users
XXMSG_INVALID = 0x7FFF
};