www.pudn.com > wow.rar > GameClient.cpp
// Copyright (C) 2004 Team Python
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "GameClient.h"
#include "NetworkInterface.h"
#include "Database.h"
#include "Character.h"
#include "Log.h"
GameClient::GameClient( )
{
m_net = NULL;
mCurrentChar = NULL;
pleaseKillMe = false;
numThreadsUsing = 0;
m_isInWorld = false;
rcvAuth = 0;
rcvLogged = 0;
m_accountLvl = 0;
logoutTime = 0;
}
GameClient::~GameClient( ) {
ClearCharacterList( );
pleaseKillMe = true;
while( numThreadsUsing != 0 );
Database::getSingleton( ).removeDatabaseInterface( m_db );
}
void GameClient::Create(int account_id, NetworkInterface *net)
{
m_accountId = account_id;
m_net = net;
m_db = Database::getSingleton( ).createDatabaseInterface( );
}
void GameClient::BindAcctID( int account_id )
{
m_accountId = account_id;
}
void GameClient::CreateDB()
{
m_db = Database::getSingleton( ).createDatabaseInterface( );
}
void GameClient::SendMsg(wowWData *data)
{
if( (uint32)m_net > 0xfff ) {
numThreadsUsing ++;
if( pleaseKillMe ) { numThreadsUsing --; return; }
m_net->sendWData(data);
numThreadsUsing --;
} else {
Log::getSingleton( ).outError( "%s:%i WARNING:\n %s\n", __FILE__, __LINE__, "Invalid m_net! Perhaps pleaseKillMe was not set, or a memory conflict!" );
}
}
char* GameClient::getCharacterName(uint32 guid)
{
CharacterList::iterator itr;
for (itr = m_characters.begin(); itr != m_characters.end(); itr++){
if ((*itr)->getGUID() == (uint32)guid){
return (char *)((*itr)->m_name);
}
}
assert(!"Invalid Player_GUID in getCharacterName!");
return NULL;
}
char* GameClient::getCharacterGuildName(uint32 guid)
{
CharacterList::iterator itr;
for (itr = m_characters.begin(); itr != m_characters.end(); itr++)
{
if ((*itr)->getGUID() == (uint32)guid)
return (char *)((*itr)->m_guildname);
}
assert(!"Invalid Player_GUID in getCharacterGuildName!");
return NULL;
}
char* GameClient::getCharacterName()
{
if (!mCurrentChar){
return NULL;
}
return (char *)mCurrentChar->m_name;
}
void GameClient::ClearCharacterList( )
{
CharacterList::iterator itr;
for (itr = m_characters.begin(); itr != m_characters.end(); itr++){
delete *itr;
*itr = NULL;
}
m_characters.clear();
}
Character* GameClient::getCurrentChar(uint32 player_guid)
{
for (CharacterList::iterator itr = m_characters.begin(); itr != m_characters.end(); itr++){
if( (*itr)->getGUID() == player_guid )
{
return((Character*)*itr);
}
}
assert(!"Invalid Player_GUID in getCurrentChar!");
return NULL;
}
void GameClient::addCharacter(Character* pChar)
{
pChar->m_accountId = m_accountId;
m_characters.push_back(pChar);
}
void GameClient::setCurrentChar(Character* pChar)
{
mCurrentChar = pChar;
if (mCurrentChar)
mCurrentChar->pClient = this;
}