/** * fügt einen Server zur Liste hinzu. * * @author FloSoft */ void LobbyServer::OnNMSLobbyServerAdd(unsigned int id, const LobbyServerInfo& info) { LobbyPlayer& player = players[id]; if(player.Host(info)) SendPlayerList(0xFFFFFFFF); }
/** * entfernt einen Server aus der Liste. * * @author FloSoft */ void LobbyServer::OnNMSLobbyServerDelete(unsigned int id) { LobbyPlayer& player = players[id]; player.NoHost(); SendToAll(LobbyMessage_Chat("SYSTEM", player.getName() + " is available")); // Spielerliste aktualisieren SendPlayerList(0xFFFFFFFF); }
/** * trennt die Verbindung zu einem Client. * * @param[in] p der Spieler. * * @author FloSoft */ void LobbyServer::Disconnect(LobbyPlayer& p) { LobbyPlayerMapIterator it = players.find(p.getId()); players_kill.push_back(it->first); if(!p.getName().empty()) SendToAll(LobbyMessage_Chat("SYSTEM", p.getName() + " left the lobby")); // schließen p.NoHost(); p.detach(); SendServerList(0xFFFFFFFF); SendPlayerList(0xFFFFFFFF); }
/** * sagt der Lobby das ein Spieler einem Spiel beigetreten ist. * * @author FloSoft */ void LobbyServer::OnNMSLobbyServerJoin(unsigned int id) { LobbyPlayer& player = players[id]; player.makeClient(); std::stringstream text; text << "Player \"" << player.getName() << "\" joined a server"; for(LobbyPlayerMapIterator it = players.begin(); it != players.end(); ++it) { LobbyPlayer& p = it->second; if(p.getName() == "LobbyBot") { p.Send(new LobbyMessage_Chat("SYSTEM", text.str())); break; } } // Spielerliste aktualisieren SendPlayerList(0xFFFFFFFF); }
/** * verarbeitet die Login-Nachricht eines Clients. * * @param[in] message Nachricht, welche ausgeführt wird * @param[in] client die Nummer des Clients * * @author FloSoft */ void LobbyServer::OnNMSLobbyLogin(unsigned int id, const unsigned int revision, const std::string& user, const std::string& pass, const std::string& version) { LobbyPlayer& player = players[id]; // Protokollversion prüfen if(!CheckProtocolVersion(revision, user, player)) return; std::string email; if(MYSQLCLIENT.LoginUser(user, pass, email, player.getPeerIP())) { LobbyPlayer* oldPlayer = GetPlayer(user); if(oldPlayer && oldPlayer->isLoggedIn()) { LOG.write("User %s@%s already logged on (slot %d == %d)!\n") % user % player.getPeerIP() % id % oldPlayer->getId(); player.Send(new LobbyMessage_Login_Error("Already logged in. On connection loss just wait a bit then try again.")); // alten Spieler rauswerfen Disconnect(*oldPlayer); } else { LOG.write("User %s@%s logged on\n") % user % player.getPeerIP(); player.occupy(user, email, version); player.Send(new LobbyMessage_Login_Done(email)); SendToAll(LobbyMessage_Chat("SYSTEM", user + " hat die Lobby betreten")); SendServerList(0xFFFFFFFF); SendPlayerList(0xFFFFFFFF); } } else { LOG.write("User %s invalid (password %s wrong?)\n") % user % "********"; player.Send(new LobbyMessage_Login_Error("User/password combination is unknown!")); Disconnect(player); } }
void CNWNXNames::UpdatePlayerList(char *value) { dword oPlayer = nGameObjectID; SendPlayerList(oPlayer); }
/** * verarbeitet die PlayerList-Anforderung eines Clients. * * @author FloSoft */ void LobbyServer::OnNMSLobbyPlayerList(unsigned int id) { SendPlayerList(id); }