summaryrefslogtreecommitdiff
path: root/src/game-server/accountconnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/accountconnection.cpp')
-rw-r--r--src/game-server/accountconnection.cpp67
1 files changed, 66 insertions, 1 deletions
diff --git a/src/game-server/accountconnection.cpp b/src/game-server/accountconnection.cpp
index 43c4f20d..bbdcdd13 100644
--- a/src/game-server/accountconnection.cpp
+++ b/src/game-server/accountconnection.cpp
@@ -33,12 +33,19 @@
#include "game-server/quest.hpp"
#include "game-server/state.hpp"
#include "net/messagein.hpp"
-#include "net/messageout.hpp"
#include "serialize/characterdata.hpp"
#include "utils/logger.h"
#include "utils/tokendispenser.hpp"
#include "utils/tokencollector.hpp"
+AccountConnection::~AccountConnection()
+{
+ if (mSyncBuffer)
+ {
+ delete (mSyncBuffer);
+ }
+}
+
bool AccountConnection::start()
{
const std::string accountServerAddress =
@@ -72,6 +79,10 @@ bool AccountConnection::start()
}
send(msg);
+ // initialize sync buffer
+ mSyncBuffer = new MessageOut(GAMSG_PLAYER_SYNC);
+ mSyncMessages = 0;
+
return true;
}
@@ -297,3 +308,57 @@ void AccountConnection::changeAccountLevel(Character *c, int level)
msg.writeShort(level);
send(msg);
}
+
+void AccountConnection::syncChanges(bool force)
+{
+ if (mSyncMessages == 0)
+ return;
+
+ // send buffer if:
+ // a.) forced by any process
+ // b.) every 10 seconds
+ // c.) buffer reaches size of 1kb
+ // d.) buffer holds more then 20 messages
+ if (force ||
+ mSyncMessages > SYNC_BUFFER_LIMIT ||
+ mSyncBuffer->getLength() > SYNC_BUFFER_SIZE )
+ {
+ LOG_DEBUG("Sending GAMSG_PLAYER_SYNC with " << mSyncMessages << " messages." );
+
+ // attach end-of-buffer flag
+ mSyncBuffer->writeByte(SYNC_END_OF_BUFFER);
+ send(*mSyncBuffer);
+ delete (mSyncBuffer);
+
+ mSyncBuffer = new MessageOut(GAMSG_PLAYER_SYNC);
+ mSyncMessages = 0;
+ }
+ else
+ {
+ LOG_DEBUG("No changes to sync with account server.");
+ }
+}
+
+void AccountConnection::updateCharacterPoints(const int CharId, const int CharPoints,
+ const int CorrPoints, const int AttribId, const int AttribValue )
+{
+ mSyncMessages++;
+ mSyncBuffer->writeByte(SYNC_CHARACTER_POINTS);
+ mSyncBuffer->writeLong(CharId);
+ mSyncBuffer->writeLong(CharPoints);
+ mSyncBuffer->writeLong(CorrPoints);
+ mSyncBuffer->writeByte(AttribId);
+ mSyncBuffer->writeLong(AttribValue);
+ syncChanges();
+}
+
+void AccountConnection::updateExperience(const int CharId, const int SkillId,
+ const int SkillValue)
+{
+ mSyncMessages++;
+ mSyncBuffer->writeByte(SYNC_CHARACTER_SKILL);
+ mSyncBuffer->writeLong(CharId);
+ mSyncBuffer->writeByte(SkillId);
+ mSyncBuffer->writeLong(SkillValue);
+ syncChanges();
+}