diff options
| author | Machiavelli <machiavelli.trinity@gmail.com> | 2011-12-21 10:22:03 +0100 |
|---|---|---|
| committer | Machiavelli <machiavelli.trinity@gmail.com> | 2011-12-21 10:22:03 +0100 |
| commit | 2d93bd07baabce1ebd9445c94e44b255a01bf490 (patch) | |
| tree | 02af4a66c5e99bf84817f553776f51225ef6cf23 /src/server/game/Server | |
| parent | 17aeeaa9b57c5c430dcb9cd5e1e3ac42acf6b3d5 (diff) | |
Core/DBLayer: More generic implementation of callback chains, instead of using this functionality local to CharacterCreatInfo class. Will be used in other places as well.
Diffstat (limited to 'src/server/game/Server')
| -rwxr-xr-x | src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp | 39 | ||||
| -rwxr-xr-x | src/server/game/Server/WorldSession.h | 7 |
2 files changed, 16 insertions, 30 deletions
diff --git a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp index 017fd5a78ad..2a4e1c50ac5 100755 --- a/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp +++ b/src/server/game/Server/Protocol/Handlers/CharacterHandler.cpp @@ -394,7 +394,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte This is much more efficient than synchronous requests on packet handler, and much less DoS prone. It also prevents data syncrhonisation errors. */ - switch (createInfo->Stage) + switch (_charCreateCallback.GetStage()) { case 0: { @@ -404,8 +404,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_NAME_IN_USE); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } @@ -416,8 +415,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte _charCreateCallback.FreeResult(); _charCreateCallback.SetFutureResult(LoginDatabase.AsyncQuery(stmt)); - - createInfo->Stage++; + _charCreateCallback.NextStage(); } break; case 1: @@ -438,8 +436,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_ACCOUNT_LIMIT); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } @@ -451,8 +448,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte _charCreateCallback.FreeResult(); _charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt)); - - createInfo->Stage++; + _charCreateCallback.NextStage(); } break; case 2: @@ -468,8 +464,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_SERVER_LIMIT); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } } @@ -485,11 +480,11 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte stmt->setUInt32(0, GetAccountId()); stmt->setUInt32(1, (skipCinematics == 1 || createInfo->Class == CLASS_DEATH_KNIGHT) ? 10 : 1); _charCreateCallback.SetFutureResult(CharacterDatabase.AsyncQuery(stmt)); - createInfo->Stage++; + _charCreateCallback.NextStage(); return; } - createInfo->Stage++; + _charCreateCallback.NextStage(); HandleCharCreateCallback(PreparedQueryResult(NULL), createInfo); // Will jump to case 3 } break; @@ -523,8 +518,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } } @@ -551,8 +545,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_PVP_TEAMS_VIOLATION); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } } @@ -584,8 +577,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_UNIQUE_CLASS_LIMIT); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } } @@ -606,8 +598,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_LEVEL_REQUIREMENT); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } @@ -628,8 +619,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte data << uint8(CHAR_CREATE_ERROR); SendPacket(&data); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); return; } @@ -670,8 +660,7 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, Characte sWorld->AddCharacterNameData(newChar.GetGUIDLow(), std::string(newChar.GetName()), newChar.getGender(), newChar.getRace(), newChar.getClass()); delete createInfo; - _charCreateCallback.SetParam(NULL); - _charCreateCallback.FreeResult(); + _charCreateCallback.Reset(); } break; } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 5f36dbc9547..d1f607704b9 100755 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -184,7 +184,7 @@ class CharacterCreateInfo protected: CharacterCreateInfo(std::string name, uint8 race, uint8 cclass, uint8 gender, uint8 skin, uint8 face, uint8 hairStyle, uint8 hairColor, uint8 facialHair, uint8 outfitId, WorldPacket& data) : Name(name), Race(race), Class(cclass), Gender(gender), Skin(skin), Face(face), HairStyle(hairStyle), HairColor(hairColor), FacialHair(facialHair), - OutfitId(outfitId), Data(data), CharCount(0), Stage(0) + OutfitId(outfitId), Data(data), CharCount(0) {} /// User specified variables @@ -203,9 +203,6 @@ class CharacterCreateInfo /// Server side data uint8 CharCount; - /// Internal - uint8 Stage; // Stage of the callback chain - private: virtual ~CharacterCreateInfo(){}; }; @@ -904,7 +901,7 @@ class WorldSession QueryCallback<QueryResult, uint32> _unstablePetCallback; QueryCallback<QueryResult, uint32> _stableSwapCallback; QueryCallback<QueryResult, uint64> _sendStabledPetCallback; - QueryCallback<PreparedQueryResult, CharacterCreateInfo*> _charCreateCallback; + QueryCallback<PreparedQueryResult, CharacterCreateInfo*, true> _charCreateCallback; QueryResultHolderFuture _charLoginCallback; private: |
