306 lines
6.5 KiB
C++
306 lines
6.5 KiB
C++
|
|
#include "ClientUserManager.h"
|
||
|
|
|
||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
//构造函数
|
||
|
|
CClientUserItem::CClientUserItem()
|
||
|
|
{
|
||
|
|
//设置变量
|
||
|
|
zeromemory(&m_UserInfo,sizeof(m_UserInfo));
|
||
|
|
m_UserInfo.wTableID=INVALID_TABLE;
|
||
|
|
m_UserInfo.wChairID=INVALID_CHAIR;
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
//析构函数
|
||
|
|
CClientUserItem::~CClientUserItem()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
//构造函数
|
||
|
|
CGameUserManager::CGameUserManager()
|
||
|
|
{
|
||
|
|
//组件接口
|
||
|
|
m_pIUserManagerSink=0;
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
//析构函数
|
||
|
|
CGameUserManager::~CGameUserManager()
|
||
|
|
{
|
||
|
|
for (int i=0,l=(int)m_UserItemActive.size();i<l;++i)
|
||
|
|
{
|
||
|
|
delete m_UserItemActive[i];
|
||
|
|
}
|
||
|
|
for (int i=0,l=(int)m_PoolItem.size();i<l;++i)
|
||
|
|
{
|
||
|
|
delete m_PoolItem[i];
|
||
|
|
}
|
||
|
|
m_UserItemActive.clear();
|
||
|
|
m_PoolItem.clear();
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
//设置接口
|
||
|
|
bool CGameUserManager::SetUserManagerSink(IUserManagerSink * pIUserManagerSink)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink=pIUserManagerSink;
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
//增加用户
|
||
|
|
IClientUserItem * CGameUserManager::ActiveUserItem(const tagUserInfo & UserInfo, const tagCustomFaceInfo & CustomFaceInfo)
|
||
|
|
{
|
||
|
|
//变量定义
|
||
|
|
CClientUserItem * pClientUserItem=(CClientUserItem*)SearchUserByUserID(UserInfo.dwUserID);
|
||
|
|
if (!pClientUserItem)
|
||
|
|
{
|
||
|
|
pClientUserItem=new CClientUserItem;
|
||
|
|
if (pClientUserItem==0) return 0;
|
||
|
|
|
||
|
|
//插入用户
|
||
|
|
ASSERT(pClientUserItem!=0);
|
||
|
|
m_UserItemActive.push_back(pClientUserItem);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//设置数据
|
||
|
|
memcpy(&pClientUserItem->m_UserInfo,&UserInfo,sizeof(UserInfo));
|
||
|
|
|
||
|
|
//更新通知
|
||
|
|
ASSERT(m_pIUserManagerSink!=0);
|
||
|
|
if (m_pIUserManagerSink != 0)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink->OnUserItemAcitve(pClientUserItem);
|
||
|
|
}
|
||
|
|
|
||
|
|
return pClientUserItem;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//重置用户
|
||
|
|
bool CGameUserManager::ResetUserItem()
|
||
|
|
{
|
||
|
|
for (int i = 0;i<(int)m_UserItemActive.size();i++)
|
||
|
|
{
|
||
|
|
if (m_pIUserManagerSink)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink->OnUserItemDelete(m_UserItemActive[i]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
for (int i = 0;i<(int)m_UserItemActive.size();i++)
|
||
|
|
{
|
||
|
|
addPool(m_UserItemActive[i]);
|
||
|
|
}
|
||
|
|
|
||
|
|
//设置变量
|
||
|
|
m_UserItemActive.clear();
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
void CGameUserManager::addPool(CClientUserItem * pIClientUserItem)
|
||
|
|
{
|
||
|
|
for (int i = 0;i<(int)m_PoolItem.size();i++)
|
||
|
|
{
|
||
|
|
if (m_PoolItem[i] == pIClientUserItem)
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
m_PoolItem.push_back(pIClientUserItem);
|
||
|
|
}
|
||
|
|
|
||
|
|
CClientUserItem * CGameUserManager::getPool()
|
||
|
|
{
|
||
|
|
CClientUserItem * pClient = NULL;
|
||
|
|
if (m_PoolItem.size())
|
||
|
|
{
|
||
|
|
pClient = m_PoolItem.back();
|
||
|
|
m_PoolItem.pop_back();
|
||
|
|
return pClient;
|
||
|
|
}
|
||
|
|
pClient = new CClientUserItem;
|
||
|
|
m_UserItemActive.push_back(pClient);
|
||
|
|
return pClient;
|
||
|
|
}
|
||
|
|
|
||
|
|
//删除用户
|
||
|
|
bool CGameUserManager::DeleteUserItem(IClientUserItem * pIClientUserItem)
|
||
|
|
{
|
||
|
|
cocos2d::log("CGameUserManager::DeleteUserItem\n");
|
||
|
|
//查找用户
|
||
|
|
CClientUserItem * pUserItemActive=0;
|
||
|
|
for (int i=0,l=(int)m_UserItemActive.size();i<l;i++)
|
||
|
|
{
|
||
|
|
pUserItemActive=m_UserItemActive[i];
|
||
|
|
if (pIClientUserItem==pUserItemActive)
|
||
|
|
{
|
||
|
|
//删除用户
|
||
|
|
m_UserItemActive.erase(m_UserItemActive.begin()+i);
|
||
|
|
addPool(pUserItemActive);
|
||
|
|
|
||
|
|
//删除通知
|
||
|
|
ASSERT(m_pIUserManagerSink!=0);
|
||
|
|
if (m_pIUserManagerSink)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink->OnUserItemDelete(pUserItemActive);
|
||
|
|
}
|
||
|
|
|
||
|
|
//设置数据
|
||
|
|
zeromemory(&pUserItemActive->m_UserInfo,sizeof(tagUserInfo));
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//错误断言
|
||
|
|
ASSERT(FALSE);
|
||
|
|
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
//更新积分
|
||
|
|
bool CGameUserManager::UpdateUserItemScore(IClientUserItem * pIClientUserItem, const tagUserScore * pUserScore)
|
||
|
|
{
|
||
|
|
//效验参数
|
||
|
|
ASSERT(pUserScore!=0);
|
||
|
|
ASSERT(pIClientUserItem!=0);
|
||
|
|
|
||
|
|
//获取用户
|
||
|
|
tagUserInfo * pUserInfo=pIClientUserItem->GetUserInfo();
|
||
|
|
|
||
|
|
////以往数据
|
||
|
|
//tagUserScore oldUserScore;
|
||
|
|
//memset(&oldUserScore, 0x0, sizeof(oldUserScore));
|
||
|
|
|
||
|
|
pUserInfo->lScore=pUserScore->lScore;
|
||
|
|
pUserInfo->lInsureScore=pUserScore->lInsure;
|
||
|
|
pUserInfo->lWinCount=pUserScore->dwWinCount;
|
||
|
|
pUserInfo->lLostCount=pUserScore->dwLostCount;
|
||
|
|
pUserInfo->lDrawCount=pUserScore->dwDrawCount;
|
||
|
|
pUserInfo->lFleeCount=pUserScore->dwFleeCount;
|
||
|
|
pUserInfo->lExperience=pUserScore->dwExperience;
|
||
|
|
|
||
|
|
//通知更新
|
||
|
|
ASSERT(m_pIUserManagerSink!=0);
|
||
|
|
if (m_pIUserManagerSink)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink->OnUserItemUpdate(pIClientUserItem);
|
||
|
|
}
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
//更新状态
|
||
|
|
bool CGameUserManager::UpdateUserItemStatus(IClientUserItem * pIClientUserItem, const tagUserStatus * pUserStatus)
|
||
|
|
{
|
||
|
|
cocos2d::log("CGameUserManager::UpdateUserItemStatus\n");
|
||
|
|
//效验参数
|
||
|
|
ASSERT(pUserStatus!=0);
|
||
|
|
ASSERT(pIClientUserItem!=0);
|
||
|
|
|
||
|
|
//获取用户
|
||
|
|
tagUserInfo * pUserInfo=pIClientUserItem->GetUserInfo();
|
||
|
|
|
||
|
|
//以往数据
|
||
|
|
tagUserStatus tUserStatus;
|
||
|
|
tUserStatus.wTableID = pUserInfo->wTableID;
|
||
|
|
tUserStatus.wChairID = pUserInfo->wChairID;
|
||
|
|
tUserStatus.cbUserStatus = pUserInfo->cbUserStatus;
|
||
|
|
|
||
|
|
//设置数据
|
||
|
|
pUserInfo->wTableID=pUserStatus->wTableID;
|
||
|
|
pUserInfo->wChairID=pUserStatus->wChairID;
|
||
|
|
pUserInfo->cbUserStatus=pUserStatus->cbUserStatus;
|
||
|
|
|
||
|
|
//通知更新
|
||
|
|
ASSERT(m_pIUserManagerSink!=0);
|
||
|
|
if (m_pIUserManagerSink)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink->OnUserItemUpdate(pIClientUserItem, tUserStatus);
|
||
|
|
}
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
//更新属性
|
||
|
|
bool CGameUserManager::UpdateUserItemAttrib(IClientUserItem * pIClientUserItem, const tagUserAttrib * pUserAttrib)
|
||
|
|
{
|
||
|
|
//效验参数
|
||
|
|
ASSERT(pUserAttrib!=0);
|
||
|
|
ASSERT(pIClientUserItem!=0);
|
||
|
|
|
||
|
|
//以往数据
|
||
|
|
tagUserAttrib UserAttrib;
|
||
|
|
|
||
|
|
//通知更新
|
||
|
|
ASSERT(m_pIUserManagerSink!=0);
|
||
|
|
if (m_pIUserManagerSink)
|
||
|
|
{
|
||
|
|
m_pIUserManagerSink->OnUserItemUpdate(pIClientUserItem, UserAttrib);
|
||
|
|
}
|
||
|
|
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
//枚举用户
|
||
|
|
IClientUserItem * CGameUserManager::EnumUserItem(uint16 wEnumIndex)
|
||
|
|
{
|
||
|
|
if (wEnumIndex>=m_UserItemActive.size()) return 0;
|
||
|
|
return m_UserItemActive[wEnumIndex];
|
||
|
|
}
|
||
|
|
|
||
|
|
//查找用户
|
||
|
|
IClientUserItem * CGameUserManager::SearchUserByUserID(uint32 dwUserID)
|
||
|
|
{
|
||
|
|
//用户搜索
|
||
|
|
for (int i=0,l=(int)m_UserItemActive.size();i<l;i++)
|
||
|
|
{
|
||
|
|
CClientUserItem * pClientUserItem=m_UserItemActive[i];
|
||
|
|
if (pClientUserItem->m_UserInfo.dwUserID == dwUserID)
|
||
|
|
{
|
||
|
|
return pClientUserItem;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
//查找用户
|
||
|
|
IClientUserItem * CGameUserManager::SearchUserByGameID(uint32 dwGameID)
|
||
|
|
{
|
||
|
|
//用户搜索
|
||
|
|
for (int i=0,l=(int)m_UserItemActive.size();i<l;i++)
|
||
|
|
{
|
||
|
|
CClientUserItem * pClientUserItem=m_UserItemActive[i];
|
||
|
|
if (pClientUserItem->m_UserInfo.dwGameID == dwGameID)
|
||
|
|
{
|
||
|
|
return pClientUserItem;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
//查找用户
|
||
|
|
IClientUserItem * CGameUserManager::SearchUserByNickName(const char* pszNickName)
|
||
|
|
{
|
||
|
|
//用户搜索
|
||
|
|
for (int i=0,l=(int)m_UserItemActive.size();i<l;i++)
|
||
|
|
{
|
||
|
|
CClientUserItem * pClientUserItem=m_UserItemActive[i];
|
||
|
|
const char* pszTempNickName=pClientUserItem->GetNickName();
|
||
|
|
if (strcmp(pszNickName, pszTempNickName) == 0)
|
||
|
|
{
|
||
|
|
return pClientUserItem;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|