/**
 *  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);
    }
}
Example #6
0
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);
}