Files
Sun1602/PartyLib/BasePartyManager.h
2022-10-26 12:25:11 +08:00

101 lines
2.1 KiB
C++

#pragma once
//////////////////////////////////////////////////////////////////////////
// @history
// - check-in : lovesusun,
// - 090514 : waverix, rearrange
#include "BaseParty.h"
class BasePartyManager
{
public:
typedef STLX_MAP<WORD, BaseParty*> PARTY_MAP;
BasePartyManager();
virtual ~BasePartyManager();
virtual void Release();
virtual void Initialize(
DWORD party_pool_size
);
virtual BaseParty* CreateParty(
ePARTY_TYPE party_type,
WORD party_key,
DWORD master_key
);
virtual RC::ePARTY_RESULT DestroyParty(
WORD party_key
);
virtual RC::ePARTY_RESULT JoinParty(
WORD party_key,
const _PARTY_MEMBER_INFO& MemberInfo
);
virtual RC::ePARTY_RESULT LeaveParty(
WORD party_key,
DWORD member_key
);
virtual RC::ePARTY_RESULT ChangeMaster(
WORD party_key,
DWORD next_master_key
);
const BaseParty* const FindParty(const WORD party_key) const
{
if (party_key == 0)
{
return NULL;
}
PARTY_MAP::const_iterator it = party_map_.find(party_key);
if (it == party_map_.end())
{
return NULL;
}
return it->second;
}
const _PARTY_MEMBER_INFO* GetMemberInfo(
WORD party_key,
DWORD member_key
);
const DWORD GetMasterKey(
WORD party_key
);
template< class Operator >
BOOL For_eachMembers(const WORD party_key, Operator& op) const
{
BaseParty* const base_party = FindEditableParty(party_key);
if (base_party == NULL)
{
return FALSE;
}
base_party->For_eachMembers(op);
return TRUE;
}
BaseParty* FindEditableParty(const WORD party_key) const
{
if (party_key == 0)
{
return NULL;
}
PARTY_MAP::const_iterator it = party_map_.find(party_key);
if (it == party_map_.end())
{
return NULL;
}
return it->second;
}
protected:
util::PoolRouter<ePARTY_MAX> party_pool_router_;
PARTY_MAP party_map_;
};