#pragma once #include "stdafx.h" #include "WiseUser.h" #include "MsgHandler.h" #include "WiseCharacter.h" ////////////////////////////////////////////////////////////////////////// // // Ŭ¶óÀÌ¾ðÆ®°¡ Á¢¼ÓÇϰí Ç÷¹ÀÌÇÏ´Â »óÅ °ü·Ã ±¸ºÐÀÚ 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 ; dwIdxFree(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; }