Exemplo n.º 1
0
void CClientNode::_GetGameStat( const void *pData, size_t dataLength )
{//发送游戏统计数据(By Fellow,2003.7.22)
	ASSERT( m_pServer && pData && dataLength );

#ifdef CONSOLE_DEBUG
	cout << "_GetGameStat::Begin" << endl;
#endif

	//收到的数据包,只有控制字没有数据
	TProcessData *pProData = ( TProcessData * )pData;
	size_t nIdentity = pProData->ulIdentity;

	//需要发送的数据包
	CBuffer *pBuffer = m_theAllocator.Allocate();
	TProcessData *pStatData = 
		reinterpret_cast< TProcessData * >( const_cast< BYTE * >( pBuffer->GetBuffer() ) );

	int nDataLen = sizeof(TGAME_STAT_DATA);
	
	pStatData->nProtoId = s2c_gamestatistic;
	pStatData->ulIdentity = nIdentity;

	pStatData->nDataLen = nDataLen;
		//取得统计数据
	TGAME_STAT_DATA* myGameStatData = (TGAME_STAT_DATA*)pStatData->pDataBuffer;
	GetGameStat(myGameStatData);

	int nUsedLen = sizeof( TProcessData ) - 1 + nDataLen;
	pBuffer->Use( nUsedLen );
	//发送
	
	m_theSend.AddData( s2c_gamestatistic_bigpackage, pBuffer->GetBuffer(), nUsedLen );

	CBuffer *pPack = m_theSend.GetHeadPack( s2c_gamestatistic_bigpackage );

	while ( pPack )
	{
		m_pServer->SendData( m_nIndentity, ( const void * )pPack->GetBuffer(), pPack->GetUsed() );

		SAFE_RELEASE( pPack );

		pPack = m_theSend.GetNextPack( s2c_gamestatistic_bigpackage );
	}

	m_theSend.DelData( s2c_gamestatistic_bigpackage );

	SAFE_RELEASE( pPack );

	SAFE_RELEASE( pBuffer );
	
#ifdef CONSOLE_DEBUG
	cout << "_GetGameStat::End" << endl;
#endif
}
Exemplo n.º 2
0
void CClientNode::_GetRoleInfo( const void *pData, size_t dataLength )
{
	ASSERT( m_pServer && pData && dataLength );

#ifdef CONSOLE_DEBUG
	cout << "_GetRoleInfo::Begin" << endl;
#endif

	TProcessData *pRoleInfo = ( TProcessData * )pData;

	char szRoleName[_NAME_LENGTH];

	int nDataLen = pRoleInfo->nDataLen;
	nDataLen = ( nDataLen > _NAME_LENGTH ) ? _NAME_LENGTH : nDataLen;

	CBuffer *pBuffer = m_theAllocator.Allocate();
		
	TProcessData *pRoleData = reinterpret_cast< TProcessData * >( const_cast< BYTE * >( pBuffer->GetBuffer() ) );

	int nUsedLength = sizeof( TProcessData );

	size_t nIdentity = pRoleInfo->ulIdentity;
	
	pRoleData->nProtoId = s2c_roleserver_getroleinfo_result;
	pRoleData->pDataBuffer[0] = -1;
	pRoleData->nDataLen = 1;	
	pRoleData->ulIdentity = nIdentity;

	if ( nDataLen > 0 )
	{
		memcpy( szRoleName, &pRoleInfo->pDataBuffer[0], nDataLen );
		szRoleName[nDataLen] = '\0';
		
		int result = -1;

#ifdef CONSOLE_DEBUG
		cout << "_GetRoleInfo::GetRoleInfo " << szRoleName << endl;
#endif

		int nRoleInfoLen = 0;
		
		if (!IsRoleLock(szRoleName))
			GetRoleInfo( &pRoleData->pDataBuffer[1], szRoleName, nRoleInfoLen );

		if ( nRoleInfoLen > 0 )
		{
			pRoleData->pDataBuffer[0] = 1;
			pRoleData->nDataLen = nRoleInfoLen + 1;

			nUsedLength = sizeof( TProcessData ) + nRoleInfoLen;
		}
	}

	pBuffer->Use( nUsedLength );

	m_theSend.AddData( s2c_roleserver_getroleinfo_result, pBuffer->GetBuffer(), nUsedLength, nIdentity );

	CBuffer *pPack = m_theSend.GetHeadPack( s2c_roleserver_getroleinfo_result );

	while ( pPack )
	{
		m_pServer->SendData( m_nIndentity, ( const void * )pPack->GetBuffer(), pPack->GetUsed() );

		SAFE_RELEASE( pPack );

		pPack = m_theSend.GetNextPack( s2c_roleserver_getroleinfo_result );
	}

	m_theSend.DelData( s2c_roleserver_getroleinfo_result );

	SAFE_RELEASE( pPack );

	SAFE_RELEASE( pBuffer );

#ifdef CONSOLE_DEBUG
	cout << "_GetRoleInfo::End" << endl;
#endif
}
Exemplo n.º 3
0
void CClientNode::_QueryRoleList( const void *pData, size_t dataLength )
{
	char szAccountName[_NAME_LENGTH];

	ASSERT( m_pServer && pData && dataLength );

#ifdef CONSOLE_DEBUG
	cout << "_QueryRoleList::Begin" << endl;
#endif

	TProcessData *pPlayerList = ( TProcessData * )pData;

	int nRoleListCount = pPlayerList->pDataBuffer[0];
	int nLen = pPlayerList->nDataLen;
	unsigned long ulIdentity = pPlayerList->ulIdentity;

	if ( nLen <= 1 || nLen >= _NAME_LENGTH )
	{
#ifdef CONSOLE_DEBUG
		cout << "_QueryRoleList::Name is invalid" << endl;
#endif

		return;
	}

	memcpy( szAccountName, ( const char * )( &pPlayerList->pDataBuffer[1] ), nLen - 1 );
	szAccountName[nLen - 1] = '\0';

	/*
	 * Database
	 */
	S3DBI_RoleBaseInfo DBI[4];
	const size_t s_nStructSize = sizeof( S3DBI_RoleBaseInfo );

#ifdef CONSOLE_DEBUG
	cout << "_QueryRoleList::GetRoleListOfAccount " << szAccountName << endl;
#endif

	int nCount = GetRoleListOfAccount( szAccountName, &DBI[0], nRoleListCount );

	CBuffer *pBuffer = m_theAllocator.Allocate();

	TProcessData *pListData = reinterpret_cast< TProcessData * >( const_cast< BYTE * >( pBuffer->GetBuffer() ) );

	pListData->nProtoId = s2c_roleserver_getrolelist_result;
	pListData->ulIdentity = ulIdentity;

	int nDataLen = nCount * s_nStructSize + 1;
	pListData->nDataLen = nDataLen;
	
	pListData->pDataBuffer[0] = nCount;
	memcpy( &pListData->pDataBuffer[1], &DBI[0], nDataLen );

	int nUsedLen = sizeof( TProcessData ) - 1 + nDataLen;
	pBuffer->Use( nUsedLen );

	m_pServer->SendData( m_nIndentity, ( const void * )pListData, nUsedLen );

	SAFE_RELEASE( pBuffer );	

#ifdef CONSOLE_DEBUG
	cout << "_QueryRoleList::end" << endl;
#endif
}