Files
Sun1602/Server/DatabaseProxy/PacketHandler/Handler_FromGameServer.Base.cpp
2022-10-26 12:25:11 +08:00

558 lines
21 KiB
C++

#include "stdafx.h"
#include ".\Handler_FromGameServer.h"
#include <Macro.h>
#include <ResultCode.h>
#include <SCSlot.h>
#include <SCSlotContainer.h>
#include <PacketStruct_DG.h>
#include "Sessions/ChildServerSession.h"
#include "DBUser.h"
#include "DBUserManager.h"
#include "Sessions/GameServerSession.h"
#include "DBProxyServerEx.h"
#include "QueryObjects/GameServerQuery.h"
#include "ProxyNodes/DBQueryProxyManager.h"
#if 0
ChildServerSession* pServerSession; // argument definition argument, to support the intellisense
#endif
Handler_FromGameServer_IMPL(DG_CHARINFO_CONNECT_CHAR_CMD)
{
__TOUCHED((wSize));
// CHANGES: f110426.2L,
const MSG_DG_CHARINFO_CONNECT_CHAR_CMD* recv_msg =
static_cast<MSG_DG_CHARINFO_CONNECT_CHAR_CMD*>(pMsg);
const USERGUID user_guid = recv_msg->m_dwKey;
const CHARGUID char_guid = recv_msg->char_guid;
nsQuery::DBQueryProxyManager* const db_query_proxy_manager = \
nsQuery::DBQueryProxyManager::Instance();
DBUser* db_user = NULL;
DBCharacter* db_character = NULL;
nsQuery::DBQueryProxyManager::eFindResult find_result = \
db_query_proxy_manager->FindUserWithPendings(user_guid, char_guid, &db_user, &db_character);
if (find_result == db_query_proxy_manager->eFindResult_NotFound) {
SUNLOG(eCRITICAL_LOG, _T("|[%s]|未能找到角色信息(%d) in user (%u)|"),
__FUNCTION__, char_guid, user_guid);
return;
};
//
DBCharacter* const prev_db_character = db_user->GetConnectedChar();
if (prev_db_character != NULL)
{
ChildServerSession* user_session = db_user->GetServerSession();
SUNLOG(eCRITICAL_LOG,
_T("|[%s]|信息=同步不匹配。DBChar已经存在|")
_T("Addins: 账号Guid=%u, DBState=%d, ")
_T("角色Guid(prev)=%d -> 角色Guid(new)=%d, ")
_T("服务信息(prev)={%d,%d} -> 服务信息(new)={%d,%d}|"),
__FUNCTION__,
user_guid, db_user->GetDBState(),
prev_db_character->GetCharGuid(), char_guid,
(user_session ? user_session->GetSessionIndex() : 0),
(user_session ? user_session->GetServerType() : 0),
pServerSession->GetSessionIndex(),
pServerSession->GetServerType());
//
db_user->UpdateChar(eDB_UPDATE_INNER, db_user->GetChannelID(), prev_db_character);
if (prev_db_character != db_character) {
db_user->OnDisconnectChar();
};
};
// NOTE: if this case occurred, we have to regard intended abusing action
if (find_result == db_query_proxy_manager->eFindResult_Pending)
{
SUNLOG(eCRITICAL_LOG,
_T("|[%s]|信息=意外状态. (pending state)|")
_T("账号Guid=%u, 状态=%d, 事务=%d, 更新=%d|"),
__FUNCTION__,
user_guid, db_user->GetDBState(),
db_user->IsTransactionSerialize(), db_user->IsTransactionDBUpdate());
return;
};
//
ASSERT(db_user->CanLogin());
if (prev_db_character != db_character) {
db_user->OnConnectChar(char_guid); // assertion
};
db_user->SetServerSession(pServerSession);
//
;{
// NOTE: f110429.4L
db_user->UpdateLatestUpdateTick();
db_user->IncreaseChannelTransactionPhase();
// NOTE: f110622.2L, call twice, this process support to reduce irregula hangs
// like an unexpected fault down server
db_user->IncreaseChannelTransactionPhase();
// CHANGES: f110426.2L, changes to forwarding message to make successful replication process.
MSG_DG_CHARINFO_CONNECT_CHAR_CMD msg_ack = *recv_msg;
pServerSession->SendPacket(&msg_ack, msg_ack.GetSize());
};
//
return;
//----------------------------------------------------------------------------------------------
#if SUN_CODE_BACKUP
MSG_DG_CHARINFO_CONNECT_CHAR_CMD* pRecvMsg = (MSG_DG_CHARINFO_CONNECT_CHAR_CMD*)pMsg;
DWORD UserKey = pRecvMsg->m_dwKey;
CHARGUID CharGuid = pRecvMsg->m_CharGuid;
DBUser * pUser = g_DBUserManager.FindUser(UserKey);
if( !pUser )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_CONNECT_CHAR_CMD][UGuid:%u,CGuid:%u]DBUser未找到", UserKey, CharGuid );
return;
}
if( pUser->GetConnectedChar() )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_CONNECT_CHAR_CMD][UGuid:%u,CGuid:%u]DBCharacter已存在(%u),Index(%u),t(%u)",
UserKey, CharGuid, pUser->GetDBState(), pServerSession->GetSessionIndex(), pServerSession->GetServerType() );
if( pUser->GetServerSession() )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_CONNECT_CHAR_CMD][UGuid:%u,CGuid:%u]DBCharacter已存在(%u),Index(%u),t(%u)",
UserKey, CharGuid, pUser->GetDBState(), pUser->GetServerSession()->GetSessionIndex(), pUser->GetServerSession()->GetServerType() );
}
pUser->OnDisconnectChar();
}
if( !pUser->CanLogin() )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_CONNECT_CHAR_CMD][UGuid:%u,CGuid:%u] 状态(%u) 事务(%u/%u) 很奇怪!",
UserKey, CharGuid, pUser->GetDBState(), pUser->IsTransactionSerialize(), pUser->IsTransactionDBUpdate() );
pUser->SetDBState(eDB_STATE_CREATED);
}
DBCharacter* pCharacter = pUser->FindCharacter( CharGuid );
if( !pCharacter )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_CONNECT_CHAR_CMD][UGuid:%u,CGuid:%u]DBCharacterIsNotFound", UserKey, CharGuid );
return;
}
// 某腐磐 立加
if( !pUser->OnConnectChar( CharGuid ) )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_CONNECT_CHAR_CMD][UGuid:%u,CGuid:%u]连接角色数据库失败", UserKey, CharGuid );
}
pUser->SetServerSession( pServerSession );
#endif
}
Handler_FromGameServer_IMPL(DG_CHARINFO_DISCONNECT_CHAR_CMD)
{
__TOUCHED((pServerSession, wSize));
const MSG_DG_CHARINFO_DISCONNECT_CHAR_CMD* recv_msg = \
static_cast<MSG_DG_CHARINFO_DISCONNECT_CHAR_CMD*>(pMsg);
const DWORD user_key = recv_msg->m_dwKey;
DBUser* db_user = g_DBUserManager.FindUser(user_key);
if (db_user == NULL)
{
SUNLOG(eCRITICAL_LOG,
_T("["__FUNCTION__"]|信息=未能找到DBUser|账号Guid=%u|"), user_key);
return;
}
}
// 蜡历 立加 秦力
Handler_FromGameServer_IMPL(DG_CHARINFO_DISCONNECT_CMD)
{
__TOUCHED((pServerSession, wSize));
const MSG_DG_CHARINFO_DISCONNECT_CMD* recv_msg = \
static_cast<MSG_DG_CHARINFO_DISCONNECT_CMD*>(pMsg);
const USERGUID user_guid = recv_msg->m_dwKey;
nsQuery::DBQueryProxyManager* const db_query_proxy_manager = \
nsQuery::DBQueryProxyManager::Instance();
DBUser* db_user = NULL;
nsQuery::DBQueryProxyManager::eFindResult find_result = \
db_query_proxy_manager->FindUserWithPendings(user_guid, &db_user);
if (find_result == db_query_proxy_manager->eFindResult_NotFound) {
SUNLOG(eCRITICAL_LOG, _T("|[%s]|未能找到账号(%u)|"),
__FUNCTION__, user_guid);
return;
};
// NOTE: f110426.2L, check duplicated connection states
BYTE current_channel_id = db_user->GetChannelID();
if (current_channel_id == recv_msg->m_ChannelID)
{
db_user->LeaveChannelTransaction();
if (find_result == db_query_proxy_manager->eFindResult_Service) {
db_user->Disconnect(recv_msg->m_ChannelID);
}
db_user->OnDisconnectChar();
}
else
{
// NOTE: f110426.2L, I may think that this state can a reversed sequence
// like a duplicated connection status.
SUNLOG(eCRITICAL_LOG,
_T("|["__FUNCTION__"]|信息=意外状态, tic-toc机制崩溃 ")
_T("关于连接和断开流是崩溃的|账号Guid=%u|"),
user_guid);
}
}
Handler_FromGameServer_IMPL(DG_CHARINFO_UPDATE_TRANSACTION_CONTROL_SYN)
{
// CHANGES: f110412.2L, code arrangement and added 'char_guid' control
// to prevent problem that can't find handle like user
__TOUCHED((pServerSession, wSize));
const MSG_DG_CHARINFO_UPDATE_TRANSACTION_CONTROL_SYN* recv_msg =
static_cast<MSG_DG_CHARINFO_UPDATE_TRANSACTION_CONTROL_SYN*>(pMsg);
const USERGUID user_guid = recv_msg->m_dwKey;
const CHARGUID char_guid = recv_msg->char_guid_;
nsQuery::DBQueryProxyManager* const db_query_proxy_manager = \
nsQuery::DBQueryProxyManager::Instance();
DBUser* db_user = NULL;
DBCharacter* db_character = NULL;
nsQuery::DBQueryProxyManager::eFindResult find_result = \
db_query_proxy_manager->FindUserWithPendings(user_guid, char_guid, &db_user, &db_character);
if (find_result == db_query_proxy_manager->eFindResult_NotFound) {
SUNLOG(eCRITICAL_LOG, _T("|[%s]|未能找到(%u)的角色信息(%d) |"),
__FUNCTION__,user_guid, char_guid);
return;
};
//
switch (recv_msg->m_byTransControl)
{
case recv_msg->SERIALIZE_LOCKING:
db_user->EnterTransactionSerialize();
// NOTE: f110429.4L, a dangling user occur possibility
// when he moves a field server to a battle server
db_user->UpdateLatestUpdateTick();
break;
case recv_msg->SERIALIZE_UNLOCKING:
db_user->LeaveTransactionSerialize();
break;
case recv_msg->DBUPDATE_LOCKING:
db_user->EnterTransactionDBUpdate();
break;
case recv_msg->DBUPDATE_UNLOCKING:
db_user->LeaveTransactionDBUpdate();
break;
case recv_msg->SERIALIZE_UNLOCKING_WITH_GUILDWAREHOUSE:
db_user->LeaveTransactionSerialize();
db_user->EnterTransactionDBUpdate();
if (db_user->UpdateChar(eDB_UPDATE_GUILDWAREHOUSE_SYN,
recv_msg->m_ChannelID, db_character) == false)
{
//(lst1024)(090619) NULL 曼炼 滚弊 荐沥. (pUser->GetConnectedChar()->Get...)
SUNLOG(eCRITICAL_LOG, _T("|帮会仓库用户更新失败|账号Guid=%u|"),
user_guid);
}
break;
};
}
// 沥焊 炼雀 夸没
Handler_FromGameServer_IMPL(DG_CHARINFO_QUERY_SYN)
{
__TOUCHED((pServerSession, wSize));
MSG_DG_CHARINFO_QUERY_SYN* pRecvMsg = (MSG_DG_CHARINFO_QUERY_SYN*)pMsg;
DWORD UserKey = pRecvMsg->m_dwKey;
DWORD ErrorCode = 0;
DBUser* pUser = g_DBUserManager.FindUser( UserKey );
if( !pUser )
{
ErrorCode = 1;
goto lb_NakMsg;
}
if( pUser->GetServerSession() != pServerSession )
{
CHARGUID char_guid = 0;
if( pUser->GetConnectedChar() )
char_guid = pUser->GetConnectedChar()->GetCharGuid();
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_QUERY_SYN][UserGuid:%u,C:%d]会话指针异常(%u),index(%u),t(%u)",
UserKey, char_guid, pUser->GetDBState(), pServerSession->GetSessionIndex(), pServerSession->GetServerType() );
if( pUser->GetServerSession() )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_QUERY_SYN][UGuid:%u,C:%d]服务会话索引 index(%u),t(%u)",
UserKey, char_guid, pUser->GetServerSession()->GetSessionIndex(), pUser->GetServerSession()->GetServerType() );
}
ErrorCode = 2;
goto lb_NakMsg;
}
if( !pUser->CanLogin() )
{
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_QUERY_SYN][UserGuid:%u] 状态(%u) 事务(%u/%u) 异常!", UserKey, pUser->GetDBState(),
pUser->IsTransactionSerialize(), pUser->IsTransactionDBUpdate() );
ErrorCode = 2;
goto lb_NakMsg;
}
DBCharacter * pCharacter = pUser->GetConnectedChar();
if( pCharacter )
{
nsQuery::DBQueryProxyManager* const query_proxy_manager = \
nsQuery::DBQueryProxyManager::Instance();
nsQuery::DBQueryProxyManager::eEnterGameResult enter_game_result = \
query_proxy_manager->EnterGamePendingProcess(pUser, pCharacter, pServerSession);
if (enter_game_result == query_proxy_manager->eEnterGameResult_Fail) {
ErrorCode = 3;
goto lb_NakMsg;
}
if (enter_game_result == query_proxy_manager->eEnterGameResult_Enterable) {
query_proxy_manager->SendCharInfoToGameOnAllCharDataLoaded(pUser, pCharacter);
MSG_DG_CHARINFO_QUERY_ACK msg_ack;
pUser->SendPacketToGameServer(&msg_ack, sizeof(msg_ack));
}
if (enter_game_result == query_proxy_manager->eEnterGameResult_Pending) {
// not handled about query_proxy_manager->eEnterGameResult_Pending,
// that state is controlled delayed process.
nsQuery::DBQueryProxyCharNode* char_node = pCharacter->db_query_node();
char_node->RequestEnterGame(pRecvMsg, pServerSession); /// check multi request
}
//
}
else
{
ErrorCode = 3;
goto lb_NakMsg;
}
return;
lb_NakMsg:
switch(ErrorCode)
{
case 1:
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_QUERY_SYN][UserGuid:%u]没有 DBUser", UserKey );
break;
case 2:
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_QUERY_SYN][UserGuid:%u]会话指针异常", UserKey );
break;
case 3:
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_QUERY_SYN][UserGuid:%u]DBCharacter未找到", UserKey );
break;
}
MSG_DG_CHARINFO_QUERY_NAK nmsg;
nmsg.m_dwKey = UserKey;
switch(ErrorCode)
{
case 1:
nmsg.m_dwErrorCode = RC::RC_DISCONNECT_NOT_FOUND_DB_USER;
break;
case 2:
nmsg.m_dwErrorCode = RC::RC_DISCONNECTION_INVALID_CHAR_STATE;
break;
case 3:
nmsg.m_dwErrorCode = RC::RC_DISCONNECT_NOT_CONNECTED_DB_CHARACTER;
break;
}
pServerSession->SendPacket( &nmsg, sizeof(nmsg) );
}
// 沥焊 历厘 夸没
Handler_FromGameServer_IMPL(DG_CHARINFO_UPDATE_SYN)
{
__TOUCHED((pServerSession, wSize));
const MSG_DG_CHARINFO_UPDATE_SYN* recv_msg = static_cast<MSG_DG_CHARINFO_UPDATE_SYN*>(pMsg);
// CHANGES: f110412.2L, changes logic to prevent disabled update
// when the this entry point has connectless character
const USERGUID user_guid = recv_msg->m_dwKey;
const CHARGUID char_guid = recv_msg->char_guid_;
nsQuery::DBQueryProxyManager* const db_query_proxy_manager = \
nsQuery::DBQueryProxyManager::Instance();
DBUser* db_user = NULL;
DBCharacter* db_character = NULL;
nsQuery::DBQueryProxyManager::eFindResult find_result = \
db_query_proxy_manager->FindUserWithPendings(user_guid, char_guid, &db_user, &db_character);
if (find_result == db_query_proxy_manager->eFindResult_NotFound)
{
MSG_DG_CHARINFO_UPDATE_NAK msg_nak;
msg_nak.m_dwKey = user_guid;
msg_nak.m_dwErrorCode = RC::RC_DISCONNECT_NOT_FOUND_DB_USER;
pServerSession->SendPacket(&msg_nak, sizeof(msg_nak));
SUNLOG(eCRITICAL_LOG, _T("|[%s]|未能找到(%u)的角色信息(%d)|"),
__FUNCTION__, char_guid, user_guid);
return;
};
//
if (db_user->UpdateChar(eDB_UPDATE_SYN, recv_msg->m_ChannelID, db_character) == false)
{
MSG_DG_CHARINFO_UPDATE_NAK msg_nak;
msg_nak.m_dwKey = user_guid;
msg_nak.m_dwErrorCode = RC::RC_DISCONNECT_NOT_CONNECTED_DB_CHARACTER;
pServerSession->SendPacket(&msg_nak, sizeof(msg_nak));
SUNLOG(eCRITICAL_LOG,
"["__FUNCTION__"]|信息=不正常状态|账号Guid=%u|状态=%d|事务=(%u/%u)|",
user_guid, db_user->GetDBState(),
db_user->IsTransactionSerialize(), db_user->IsTransactionDBUpdate());
return;
}
//_NA000023_090323_ENHANCED_INVENTORY_SLOT_FUNCTIONALITY_DB_
;{ // character leave field update event
MSG_DG_CHARINFO_UPDATE_ACK msg_ack;
db_user->SendPacketToGameServer(&msg_ack, sizeof(msg_ack));
db_user->OnDisconnectChar();
db_user->LeaveChannelTransaction(); // NOTE: f110622.2L, reduce user connection hangs.
db_user->SetServerSession(pServerSession); // (NOTE) custom logic is settled null
};
}
Handler_FromGameServer_IMPL(DG_CHARINFO_UPDATE_DBR)
{
__TOUCHED((pServerSession, wSize));
const MSG_DBPROXY_RESULT* db_result = static_cast<MSG_DBPROXY_RESULT*>(pMsg);
Query_Char_Update* const query_result = \
reinterpret_cast<Query_Char_Update*>(db_result->m_pData);
const DWORD user_guid = query_result->GetUserKey();
using nsQuery::DBQueryProxyManager;
DBQueryProxyManager* const db_query_proxy_manager = DBQueryProxyManager::Instance();
DBUser* db_user = g_DBUserManager.FindUser(user_guid);
if (db_user == NULL)
{
db_query_proxy_manager->DBResult_Char_Update(user_guid, query_result->char_guid(), \
nsQuery::DBQueryProxyCharNode::eTrans_Update_CharInfo);
Query_Char_Update::FREE(query_result);
return;
}
db_query_proxy_manager->DBResult_Char_Update(*query_result, db_user);
Query_Char_Update::FREE(query_result);
return;
}
//_NA000023_090323_ENHANCED_INVENTORY_SLOT_FUNCTIONALITY_DB_
Handler_FromGameServer_IMPL(DG_CHARINFO_UPDATE_INVEN_DBR)
{
__TOUCHED((pServerSession, wSize));
const MSG_DBPROXY_RESULT* db_result = static_cast<MSG_DBPROXY_RESULT*>(pMsg);
Query_Char_Update_Inventory* const query_result = \
reinterpret_cast<Query_Char_Update_Inventory*>(db_result->m_pData);
const DWORD user_guid = query_result->GetUserKey();
using nsQuery::DBQueryProxyManager;
DBQueryProxyManager* const db_query_proxy_manager = DBQueryProxyManager::Instance();
DBUser* db_user = g_DBUserManager.FindUser(user_guid);
if (db_user == NULL)
{
db_query_proxy_manager->DBResult_Char_Update(user_guid, query_result->char_guid(),\
nsQuery::DBQueryProxyCharNode::eTrans_Update_InvenInfo);
Query_Char_Update_Inventory::FREE(query_result);
return;
}
db_query_proxy_manager->DBResult_Char_Update(*query_result, db_user);
Query_Char_Update_Inventory::FREE(query_result);
return;
}
// (WAVERIX) DB Result
Handler_FromGameServer_IMPL(DG_CHARINFO_WAREHOUSE_INVENTORY_PWD_UPDATE_DBR)
{
__TOUCHED((pServerSession, wSize));
MSG_DBPROXY_RESULT* pResult = (MSG_DBPROXY_RESULT *)pMsg;
Query_Password_Update* pQResult = (Query_Password_Update*)pResult->m_pData;
DWORD UserKey = pQResult->GetUserKey();
MSG_DG_WAREHOUSE_PWD_SETTING_ACK msgACK;
DBUser* pUser = g_DBUserManager.FindUser( UserKey );
if( !pUser )
{
SUNLOG(eFULL_LOG, "[DG_CHARINFO_WAREHOUSE_INVENTORY_PWD_UPDATE_DBR][UserGuid:%u]DBUser未找到(%s)", UserKey, pQResult->GetQuery() );
goto RELEASE_ROUTINE;
}
DBCharacter* pCharacter = pUser->GetConnectedChar();
if( !pCharacter )
{
// 捞 版快啊 惯积茄促搁 沥富 固功...
//msgACK.m_byRetCode = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::RET_START_FAIL;
//pUser->SendPacketToGameServer( &msgACK, sizeof(msgACK) );
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_WAREHOUSE_INVENTORY_PWD_UPDATE_DBR][UGuid:%u]DBCharacter未连接", UserKey );
goto RELEASE_ROUTINE;
}
DBUser::ePWD_TRANSACTION eTrans = pUser->PasswordTransaction();
sPASSWORD_BLOCK_IN_DBPROXY* pPwdBlock
= DBUser::ePWD_TRANS_WAREHOUSE == eTrans ? pUser->GetTempWarehousePassword()
: DBUser::ePWD_TRANS_INVENTORY == eTrans ? pCharacter->GetTempInventoryPassword()
: NULL;
if( !(pPwdBlock && pQResult->ResultSuccess()) )
{
msgACK.m_byRetCode = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::RET_FAIL;
switch( eTrans )
{
case DBUser::ePWD_TRANS_WAREHOUSE:
strncpy( msgACK.m_Password, pUser->GetWarehousePassword(), MAX_WAREHOUSE_INVENTORY_PWD_LENGTH );
msgACK.TypeCode() = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::PWD_WAREHOUSE;
break;
case DBUser::ePWD_TRANS_INVENTORY:
strncpy( msgACK.m_Password, pCharacter->GetInventoryPassword(), MAX_WAREHOUSE_INVENTORY_PWD_LENGTH );
msgACK.TypeCode() = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::PWD_INVENTORY;
break;
default:
{
msgACK.m_byRetCode = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::RET_START_FAIL;
}
break;
}
pUser->SendPacketToGameServer( &msgACK, sizeof(msgACK) );
SUNLOG( eCRITICAL_LOG, "[DG_CHARINFO_WAREHOUSE_INVENTORY_PWD_UPDATE_DBR][UGuid:%u]无效的密码 -或- 失败", UserKey );
goto RELEASE_ROUTINE;
}
// 咯扁鳖瘤 坷绰 巴篮 己傍捞扼绰 家府.
{
msgACK.ReturnCode() = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::RET_SUCCESS;
switch( pPwdBlock->Type() )
{
case sPASSWORD_BLOCK_IN_DBPROXY::WAREHOUSE:
pUser->SetWarehousePassword( pPwdBlock->Get() );
strncpy( msgACK.m_Password, pUser->GetWarehousePassword(), MAX_WAREHOUSE_INVENTORY_PWD_LENGTH );
msgACK.TypeCode() = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::PWD_WAREHOUSE;
break;
case sPASSWORD_BLOCK_IN_DBPROXY::INVENTORY:
pCharacter->SetInventoryPassword( pPwdBlock->Get() );
strncpy( msgACK.m_Password, pCharacter->GetInventoryPassword(), MAX_WAREHOUSE_INVENTORY_PWD_LENGTH );
msgACK.TypeCode() = MSG_DG_WAREHOUSE_PWD_SETTING_ACK::PWD_INVENTORY;
break;
}
pUser->PasswordTransaction() = DBUser::ePWD_NO_TRANS;
pUser->SendPacketToGameServer( &msgACK, sizeof(msgACK) );
g_DBProxyServer.FreeTempPasswordBlock( pPwdBlock );
}
RELEASE_ROUTINE:
Query_Password_Update::FREE( pQResult );
pQResult = NULL;
}
//乔肺档 历厘
#ifdef __CN_OO0510__FATIGUE_MATCHING_UPDATE
//GameServer俊辑 Update
Handler_FromGameServer_IMPL(DG_OTHER_FATIGUE_CMD)
{
__TOUCHED((pServerSession, wSize));
MSG_DG_OTHER_FATIGUE_CMD* pRecvMsg = (MSG_DG_OTHER_FATIGUE_CMD *)pMsg;
DWORD UserKey = pRecvMsg->m_dwKey;
DBUser* pUser = g_DBUserManager.FindUser(UserKey);
if( !pUser )
{
SUNLOG( eCRITICAL_LOG, "[DG_OTHER_FATIGUE_CMD][UGuid:%u,CGuid:%u]DBUser未找到", UserKey );
return;
}
pUser->SetPlayTime( pRecvMsg->m_wPlayTime );
pUser->SetOfflineTime( pRecvMsg->m_wOfflineTime );
}
#endif //__CN_OO0510__FATIGUE_MATCHING_UPDATE