101 lines
2.1 KiB
C++
101 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "stdafx.h"
|
|
#include "WiseUser.h"
|
|
#include "MsgHandler.h"
|
|
|
|
#include "WiseCharacter.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// <USER OBJECT>
|
|
// 클라이언트가 접속하고 플레이하는 상태 관련 구분자
|
|
|
|
WiseUser::WiseUser() :
|
|
m_pSelectedCharacter(NULL)
|
|
{
|
|
m_ObjectType = OBJTYPE_USER;
|
|
m_dwObjectKey = 0;
|
|
|
|
m_pAddin = new (m_pAddinStream) WiseUserAddin;
|
|
}
|
|
|
|
WiseUser::~WiseUser()
|
|
{
|
|
}
|
|
|
|
void WiseUser::Init(LogicFlowBase* pLogicFlow)
|
|
{
|
|
m_rLogicFlow = LogicFlowDelegator(pLogicFlow);
|
|
m_rLogicFlow.SetWiseUser(this);
|
|
|
|
m_UserSessionMgr.Init();
|
|
m_UserSessionMgr.BindWiseUser(this);
|
|
|
|
m_pSelectedCharacter = NULL;
|
|
memset(m_pCharacters, 0, sizeof(m_pCharacters));
|
|
|
|
ZoneController().SetWiseUser(this);
|
|
|
|
RECV_MSG().ReFresh();
|
|
SEND_MSG().ReFresh();
|
|
}
|
|
|
|
void WiseUser::Release()
|
|
{
|
|
sSIG_NOTIFY rNOTIFY;
|
|
rNOTIFY.SUBTYPE() = sSIG_NOTIFY::NTF_USER_RELEASED;
|
|
m_rLogicFlow.OnMsg(&rNOTIFY);
|
|
|
|
m_rLogicFlow.SetWiseUser(NULL);
|
|
m_rLogicFlow = LogicFlowDelegator(NULL);
|
|
|
|
m_UserSessionMgr.UnbindWiseUser();
|
|
m_UserSessionMgr.Release();
|
|
|
|
SetPeriodicWork(NULL);
|
|
|
|
m_pSelectedCharacter = NULL;
|
|
|
|
ObjectPoolRouter* pROUTER = ObjectPoolRouter::Instance();
|
|
WiseCharacter** pChar = m_pCharacters;
|
|
for(DWORD dwIdx=0 ; dwIdx<MAX_CHARACTER_LIST_NUM ; ++dwIdx, ++pChar)
|
|
{
|
|
if(!(*pChar))
|
|
continue;
|
|
|
|
pROUTER->Free(OBJTYPE_CHARACTER, *pChar);
|
|
}
|
|
memset(m_pCharacters, 0, sizeof(m_pCharacters));
|
|
|
|
AccountController().Free();
|
|
}
|
|
|
|
void WiseUser::OnMsg(sSIG_MSG* pSIG_MSG)
|
|
{
|
|
if(this && GetPeriodicWork())
|
|
MsgHandler::Instance()->OnMsg((sSIG_WISEBASE*)pSIG_MSG, this);
|
|
}
|
|
|
|
BOOL WiseUser::AddChar(SLOTIDX bySlotIdx, CLIENT_CHARACTER_PART& rCHAR_INFO)
|
|
{
|
|
WiseCharacter*& rCHARPTR = m_pCharacters[bySlotIdx];
|
|
if((bySlotIdx < MAX_CHARACTER_LIST_NUM) && (NULL == rCHARPTR))
|
|
{
|
|
ObjectPoolRouter* pROUTER = ObjectPoolRouter::Instance();
|
|
WiseCharacter* pCHAR = (WiseCharacter*)pROUTER->Alloc(OBJTYPE_CHARACTER);
|
|
pCHAR->Init();
|
|
pCHAR->IDXofSLOT() = bySlotIdx;
|
|
pCHAR->CHAR_INFO() = rCHAR_INFO;
|
|
|
|
rCHARPTR = pCHAR;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
DEBUGGING_CODE_L1("FAIL");
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|