Mangos源码分析
--Mangos game
Src/game目录
/// Read the client transmitted data
void WorldSocket::OnRead()
{
TcpSocket::OnRead();
switch (_cmd)
{
case CMSG_PING:
{
_HandlePing(packet);
break;
}
case CMSG_AUTH_SESSION://权限检查
{
_HandleAuthSession(packet);
break;
}
default:
{
///- Else, put it in the world session queue for this user (need to be already authenticated)
if (_session)
_session->QueuePacket(packet);
else
sLog.outDetail("Received out of place packet with cmdid 0x%.4X", _cmd);
break;
}
}
}
/// Handle the client authentication packet
void WorldSocket::_HandleAuthSession(WorldPacket& recvPacket)
{
//从count表中检出对应的v,s值
//根据收到的包的内容计算v,s的值
// loginDatabase.PExecute("UPDATE `account` SET `v` = '0', `s` = '0' WHERE `username` = '%s'", safe_account.c_str());//将v,s的值清0
//比较数据表的中V值和计算出的V值是否相同,如果相同,则密码正确。
//向客户端发送成功的数据包
///- Create a new WorldSession for the player and add it to the World
_session = new WorldSession(id, this,security,tbc,mutetime,LocaleConstant(locale));
sWorld.AddSession(_session);
//更新对应的数据表字段
return;
}