summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Athay <ko2fan@gmail.com>2009-03-05 15:37:06 +0000
committerDavid Athay <ko2fan@gmail.com>2009-03-05 15:37:06 +0000
commit7ae5cf4b6d17a85a010c1eb3262d340e94f44e77 (patch)
tree8e4e27fa94359e34d5879a05a213d5f239908809
parentbe548ff54b8fa60a8a778714cd8fa5326722c0aa (diff)
downloadmanaserv-7ae5cf4b6d17a85a010c1eb3262d340e94f44e77.tar.gz
manaserv-7ae5cf4b6d17a85a010c1eb3262d340e94f44e77.tar.bz2
manaserv-7ae5cf4b6d17a85a010c1eb3262d340e94f44e77.tar.xz
manaserv-7ae5cf4b6d17a85a010c1eb3262d340e94f44e77.zip
Added transactions for chat events.
-rw-r--r--src/account-server/dalstorage.cpp14
-rw-r--r--src/account-server/transaction.hpp14
-rw-r--r--src/chat-server/chathandler.cpp80
-rw-r--r--src/chat-server/guildmanager.cpp3
-rw-r--r--src/sql/sqlite/updates/update_2_to_3.sql2
5 files changed, 100 insertions, 13 deletions
diff --git a/src/account-server/dalstorage.cpp b/src/account-server/dalstorage.cpp
index a524fc35..eac9f409 100644
--- a/src/account-server/dalstorage.cpp
+++ b/src/account-server/dalstorage.cpp
@@ -1635,7 +1635,7 @@ void DALStorage::addTransaction(const Transaction &trans)
{
std::stringstream sql;
sql << "INSERT INTO " << TRANSACTION_TBL_NAME
- << " VALUES (" << trans.mCharacterId << ", " << trans.mAction
+ << " VALUES (NULL, " << trans.mCharacterId << ", " << trans.mAction
<< ", '" << trans.mMessage << "', " << time(NULL) << ")";
mDb->execSql(sql.str());
}
@@ -1662,9 +1662,9 @@ std::vector<Transaction> DALStorage::getTransactions(unsigned int num)
for (int i = start; i < size; ++i)
{
Transaction trans;
- trans.mCharacterId = toUint(rec(i, 0));
- trans.mAction = toUint(rec(i, 1));
- trans.mMessage = rec(i, 2);
+ trans.mCharacterId = toUint(rec(i, 1));
+ trans.mAction = toUint(rec(i, 2));
+ trans.mMessage = rec(i, 3);
transactions.push_back(trans);
}
}
@@ -1691,9 +1691,9 @@ std::vector<Transaction> DALStorage::getTransactions(time_t date)
for (int i = 0; i < rec.rows(); ++i)
{
Transaction trans;
- trans.mCharacterId = toUint(rec(i, 0));
- trans.mAction = toUint(rec(i, 1));
- trans.mMessage = rec(i, 2);
+ trans.mCharacterId = toUint(rec(i, 1));
+ trans.mAction = toUint(rec(i, 2));
+ trans.mMessage = rec(i, 3);
transactions.push_back(trans);
}
}
diff --git a/src/account-server/transaction.hpp b/src/account-server/transaction.hpp
index 8aa1b340..fa007dfb 100644
--- a/src/account-server/transaction.hpp
+++ b/src/account-server/transaction.hpp
@@ -31,8 +31,18 @@ struct Transaction
enum
{
TRANS_CHAR_CREATE = 1,
- TRANS_CHAR_SELECTED = 2,
- TRANS_CHAR_DELETED = 3,
+ TRANS_CHAR_SELECTED,
+ TRANS_CHAR_DELETED,
+ TRANS_MSG_PUBLIC,
+ TRANS_MSG_ANNOUNCE,
+ TRANS_MSG_PRIVATE,
+ TRANS_CHANNEL_JOIN,
+ TRANS_CHANNEL_KICK,
+ TRANS_CHANNEL_MODE,
+ TRANS_CHANNEL_QUIT,
+ TRANS_CHANNEL_LIST,
+ TRANS_CHANNEL_USERLIST,
+ TRANS_CHANNEL_TOPIC,
};
#endif
diff --git a/src/chat-server/chathandler.cpp b/src/chat-server/chathandler.cpp
index 9240d957..555c1a06 100644
--- a/src/chat-server/chathandler.cpp
+++ b/src/chat-server/chathandler.cpp
@@ -27,6 +27,7 @@
#include "defines.h"
#include "account-server/character.hpp"
#include "account-server/dalstorage.hpp"
+#include "account-server/transaction.hpp"
#include "chat-server/guildmanager.hpp"
#include "chat-server/chatchannelmanager.hpp"
#include "chat-server/chatclient.hpp"
@@ -291,6 +292,13 @@ ChatHandler::handleChatMessage(ChatClient &client, MessageIn &msg)
result.writeString(text);
sendInChannel(channel, result);
}
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_MSG_PUBLIC;
+ trans.mMessage = "User said " + text;
+ storage->addTransaction(trans);
}
void
@@ -314,6 +322,13 @@ ChatHandler::handleAnnounceMessage(ChatClient &client, MessageIn &msg)
// We send the message to all players in the default channel as it is
// an announcement.
sendToEveryone(result);
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_MSG_ANNOUNCE;
+ trans.mMessage = "User announced " + text;
+ storage->addTransaction(trans);
}
else
{
@@ -323,6 +338,7 @@ ChatHandler::handleAnnounceMessage(ChatClient &client, MessageIn &msg)
LOG_INFO(client.characterName <<
" couldn't make an announcement due to insufficient rights.");
}
+
}
void
@@ -339,6 +355,14 @@ ChatHandler::handlePrivMsgMessage(ChatClient &client, MessageIn &msg)
// We seek the player to whom the message is told and send it to her/him.
sayToPlayer(client, user, text);
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_MSG_PRIVATE;
+ trans.mMessage = "User said " + text;
+ trans.mMessage.append(" to " + user);
+ storage->addTransaction(trans);
}
void ChatHandler::handleEnterChannelMessage(ChatClient &client, MessageIn &msg)
@@ -392,6 +416,13 @@ void ChatHandler::handleEnterChannelMessage(ChatClient &client, MessageIn &msg)
warnUsersAboutPlayerEventInChat(channel,
client.characterName,
CHAT_EVENT_NEW_PLAYER);
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_JOIN;
+ trans.mMessage = "User joined " + channelName;
+ storage->addTransaction(trans);
}
else
{
@@ -414,7 +445,7 @@ ChatHandler::handleModeChangeMessage(ChatClient &client, MessageIn &msg)
return;
}
- if (channel->getUserMode(&client).find('o') != std::string::npos)
+ if (channel->getUserMode(&client).find('o') == std::string::npos)
{
// invalid permissions
return;
@@ -434,6 +465,14 @@ ChatHandler::handleModeChangeMessage(ChatClient &client, MessageIn &msg)
warnUsersAboutPlayerEventInChat(channel,
info.str(),
CHAT_EVENT_MODE_CHANGE);
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_MODE;
+ trans.mMessage = "User mode " + mode;
+ trans.mMessage.append(" set on " + user);
+ storage->addTransaction(trans);
}
void
@@ -448,7 +487,7 @@ ChatHandler::handleKickUserMessage(ChatClient &client, MessageIn &msg)
return;
}
- if (channel->getUserMode(&client).find('o') != std::string::npos)
+ if (channel->getUserMode(&client).find('o') == std::string::npos)
{
// invalid permissions
return;
@@ -465,6 +504,13 @@ ChatHandler::handleKickUserMessage(ChatClient &client, MessageIn &msg)
ss.str(),
CHAT_EVENT_KICKED_PLAYER);
}
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_KICK;
+ trans.mMessage = "User kicked " + user;
+ storage->addTransaction(trans);
}
void
@@ -493,6 +539,14 @@ ChatHandler::handleQuitChannelMessage(ChatClient &client, MessageIn &msg)
warnUsersAboutPlayerEventInChat(channel,
client.characterName,
CHAT_EVENT_LEAVING_PLAYER);
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_QUIT;
+ trans.mMessage = "User left " + channel->getName();
+ storage->addTransaction(trans);
+
if(channel->getUserList().empty())
{
chatChannelManager->removeChannel(channel->getId());
@@ -519,6 +573,13 @@ ChatHandler::handleListChannelsMessage(ChatClient &client, MessageIn &msg)
}
client.send(reply);
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_LIST;
+ trans.mMessage = "";
+ storage->addTransaction(trans);
}
void
@@ -544,6 +605,13 @@ ChatHandler::handleListChannelUsersMessage(ChatClient &client, MessageIn &msg)
client.send(reply);
}
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_USERLIST;
+ trans.mMessage = "";
+ storage->addTransaction(trans);
}
void
@@ -561,6 +629,14 @@ ChatHandler::handleTopicChange(ChatClient &client, MessageIn &msg)
{
guildChannelTopicChange(channel, client.characterId, topic);
}
+
+ // log transaction
+ Transaction trans;
+ trans.mCharacterId = client.characterId;
+ trans.mAction = TRANS_CHANNEL_TOPIC;
+ trans.mMessage = "User changed topic to " + topic;
+ trans.mMessage.append(" in " + channel->getName());
+ storage->addTransaction(trans);
}
void
diff --git a/src/chat-server/guildmanager.cpp b/src/chat-server/guildmanager.cpp
index cf4ceef6..b275ee8c 100644
--- a/src/chat-server/guildmanager.cpp
+++ b/src/chat-server/guildmanager.cpp
@@ -195,12 +195,13 @@ bool GuildManager::alreadyOwner(int playerId)
std::list<int>::iterator itr = mOwners.begin();
std::list<int>::iterator itr_end = mOwners.end();
- for (itr; itr != itr_end; ++itr)
+ while (itr != itr_end)
{
if ((*itr) == playerId)
{
return true;
}
+ ++itr;
}
return false;
diff --git a/src/sql/sqlite/updates/update_2_to_3.sql b/src/sql/sqlite/updates/update_2_to_3.sql
index b2e4834d..f8fdfc91 100644
--- a/src/sql/sqlite/updates/update_2_to_3.sql
+++ b/src/sql/sqlite/updates/update_2_to_3.sql
@@ -1,5 +1,5 @@
--- add table tmw_online_list to store online users
+-- add table tmw_transactions to store transactional history
CREATE TABLE tmw_transactions
(
id INTEGER PRIMARY KEY,