Files
Sun1602/Tools/WiseClient/Object/WiseUser.cpp
T
2022-10-26 12:25:11 +08:00

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;
}