DragonNest/Server/DNGameServer/DNGuildTask.cpp

113 lines
3.2 KiB
C++
Raw Permalink Normal View History

#include "stdafx.h"
#include "DNGuildTask.h"
#include "GameSendPacket.h"
#include "DnPlayerActor.h"
#include "DNUserSession.h"
#include "DNLogConnection.h"
#include "DNMasterConnectionManager.h"
#include "DNLogConnection.h"
#include "DNUserSession.h"
#include "DNGameDataManager.h"
#include "TaskManager.h"
#include "DnGameTask.h"
#include "DNDBConnectionManager.h"
#include "DNGuildSystem.h"
#include "DnDbConnection.h"
#include "DnDbConnectionManager.h"
CDnGuildTask::CDnGuildTask(CDNGameRoom * pRoom) : CTask(pRoom), CMultiSingleton<CDnGuildTask, MAX_SESSION_COUNT>( pRoom ) /*, m_pEmblemFactory( new CDnEmblemFactory )*/
{
}
CDnGuildTask::~CDnGuildTask()
{
}
bool CDnGuildTask::Initialize()
{
return true;
}
void CDnGuildTask::Process(LOCAL_TIME LocalTime, float fDelta)
{
}
int CDnGuildTask::OnDispatchMessage(CDNUserSession * pSession, int nMainCmd, int nSubCmd, char *pData, int nLen)
{
switch( nMainCmd ) {
case CS_GUILD: return OnRecvGuildMessage( pSession, nSubCmd, pData, nLen );
}
return ERROR_NONE;
}
int CDnGuildTask::OnRecvGuildMessage(CDNUserSession * pSession, int nSubCmd, char *pData, int nLen)
{
switch( nSubCmd )
{
case eGuild::CS_GETGUILDINFO:
{
if (sizeof(CSGetGuildInfo) != nLen)
return ERROR_INVALIDPACKET;
g_pGuildManager->OnRecvCsGetGuildInfo(pSession, reinterpret_cast<CSGetGuildInfo*>(pData));
}
return ERROR_NONE;
case eGuild::CS_PLAYER_REQUEST_GUILDINFO:
{
const CSPlayerGuildInfo *pPacket = reinterpret_cast<CSPlayerGuildInfo*>(pData);
if (sizeof(CSPlayerGuildInfo) != nLen)
return ERROR_INVALIDPACKET;
CDNUserSession *pUserObj = pSession->GetGameRoom()->GetUserSession(pPacket->nSessionID);
if( !pUserObj )
{
pSession->SendPlayerGuildInfo( ERROR_GENERIC_INVALIDREQUEST, 0, NULL, NULL, 0, 0, 0, NULL );
return ERROR_GENERIC_INVALIDREQUEST;
}
const TGuildUID GuildUID = pUserObj->GetGuildUID();
if (!GuildUID.IsSet())
{
pSession->SendPlayerGuildInfo( ERROR_NONE, pUserObj->GetSessionID(), NULL, NULL, 0, 0, 0, NULL );
return ERROR_NONE;
}
CDNGuildBase* pGuild = g_pGuildManager->At(GuildUID);
if (!pGuild)
{
pSession->SendPlayerGuildInfo( ERROR_NONE, pUserObj->GetSessionID(), NULL, NULL, 0, 0, 0, NULL );
return ERROR_NONE;
}
#if !defined( PRE_ADD_NODELETEGUILD )
CDetachAutoEx<CDNGuildBase> AutoDetach(pGuild);
if (FALSE == pGuild->IsEnable())
{
pSession->SendPlayerGuildInfo( ERROR_NONE, pUserObj->GetSessionID(), NULL, NULL, 0, 0, 0, NULL );
return ERROR_NONE;
}
#endif
TGuildMember *GuildMaster = pGuild->GetGuildMaster();
if( GuildMaster )
pSession->SendPlayerGuildInfo( ERROR_NONE, pUserObj->GetSessionID(), pGuild->GetInfo()->GuildView.wszGuildName, GuildMaster->wszCharacterName, pGuild->GetLevel(), pGuild->GetMemberCount(), pGuild->GetGuildMemberSize(), pGuild->GetGuildRewardItem() );
else
pSession->SendPlayerGuildInfo( ERROR_NONE, pUserObj->GetSessionID(), pGuild->GetInfo()->GuildView.wszGuildName, NULL, pGuild->GetLevel(), pGuild->GetMemberCount(), pGuild->GetGuildMemberSize(), pGuild->GetGuildRewardItem() );
return ERROR_NONE;
}
break;
default:
return ERROR_UNKNOWN_HEADER; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾҴٸ<D2B4> <20><>¥ ó<><C3B3> <20><><EFBFBD>ϴ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
}
}