void WServer::HandlePlayerLoginResult(WorldPacket & pck) { uint32 guid, sessionid; uint8 result; pck >> guid >> sessionid >> result; if(result) { Log.Success("WServer", "Worldserver %u reports successful login of player %u", m_id, guid); Session * s = sClientMgr.GetSession(sessionid); if(s) { /* update server */ s->SetNextServer(); /* pack together a player info packet and distribute it to all the other servers */ ASSERT(s->GetPlayer()); WorldPacket data(ISMSG_PLAYER_INFO, 100); s->GetPlayer()->Pack(data); sClusterMgr.DistributePacketToAll(&data, this); } } else { Log.Error("WServer", "Worldserver %u reports failed login of player %u", m_id, guid); Session * s = sClientMgr.GetSession(sessionid); if(s) { s->ClearCurrentPlayer(); s->ClearServers(); } sClientMgr.DestroyRPlayerInfo(guid); } }
void WServer::HandlePlayerLogout(WorldPacket & pck) { uint32 sessionid, guid; pck >> sessionid >> guid; RPlayerInfo * pi = sClientMgr.GetRPlayer(guid); Session * s = sClientMgr.GetSession(sessionid); if(pi && s) { /* tell all other servers this player has gone offline */ WorldPacket data(ISMSG_DESTROY_PLAYER_INFO, 4); data << guid; sClusterMgr.DistributePacketToAll(&data, this); /* clear the player from the session */ s->ClearCurrentPlayer(); s->ClearServers(); /* destroy the playerinfo struct here */ sClientMgr.DestroyRPlayerInfo(guid); } }