Commit 9ee9616f authored by jan.koester's avatar jan.koester
Browse files

test

parent 0c76d3ef
Loading
Loading
Loading
Loading
+89 −52
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@
#include <vector>

#include <gameinfoplus/hldsview.h>
#include <gameinfoplus/bf1942view.h>
#include <gameinfoplus/cod4view.h>
#include <gameinfoplus/exception.h>

#include <dbpp/database.h>
@@ -101,17 +103,29 @@ namespace blogi {

            Args->database[0]->exec(sql,res);

            sql="select protocol,addr,port from gameserver";
            sql << "SELECT COALESCE(p.pname,'hlds'),g.addr,g.port "
                << "FROM gameserver g "
                << "LEFT JOIN gameserver_protocols p ON g.protocol=p.id";

            int count = Args->database[0]->exec(sql,res);

            for (int i = 0; i < count; i++) {
                if(atoi(res[i][0])!=0)
                    continue;
                gameinfo::HldsView view(res[i][1],atoi(res[i][2]));
                std::string pname = res[i][0];
                const char *addr  = res[i][1];
                int         port  = atoi(res[i][2]);

                if(pname == "bf1942"){
                    gameinfo::BF1942View view(addr, port);
                    BF1942.push_back(view);
                } else if(pname == "cod4"){
                    gameinfo::Cod4View view(addr, port);
                    COD4.push_back(view);
                } else {
                    gameinfo::HldsView view(addr, port);
                    HLDS.push_back(view);
                }
            }
        }

        bool haveSettings(){
            return true;
@@ -336,53 +350,74 @@ namespace blogi {

            condat << "<div id=\"content\"><div class=\"gamecard\">";

            for (auto i = HLDS.begin(); i!=HLDS.end(); ++i) {
                try{
                    gameinfo::HldsView::HldsData hldsdata;
                    rlock.lock();
                    i->refresh(hldsdata);
                    rlock.unlock();
            auto renderBaseCard = [&](const gameinfo::GameInfoData &d) {
                const char *statusClass = (d.MaxPlayers > 0) ? "online" : "offline";
                condat << "<div class=\"gamestatus-card\">";
                    condat << "<h2 class=\"server-name\">" << hldsdata.ServerName << "</h2>";
                    const char* statusClass = (hldsdata.MaxPlayers > 0) ? "online" : "offline";
                condat << "<h2 class=\"server-name\">" << d.ServerName << "</h2>";
                condat << "<div class=\"status-indicator " << statusClass << "\">"
                           << ((hldsdata.MaxPlayers > 0) ? tr(_lang,"ONLINE") : tr(_lang,"OFFLINE")) << "</div>";
                    // Start the details grid container
                       << ((d.MaxPlayers > 0) ? tr(_lang,"ONLINE") : tr(_lang,"OFFLINE")) << "</div>";
                condat << "<div class=\"details-grid\">";
                    // Row 1: Gameport
                    condat << "<div class=\"detail-item\">"
                           << "<span class=\"label\">"+tr(_lang,"Gameport:")+"</span>"
                           << "<span class=\"value\">" << hldsdata.Port << "</span>"
                           << "</div>";
                    // Row 2: Gamename
                    condat << "<div class=\"detail-item\">"
                           << "<span class=\"label\">"+tr(_lang,"Gamename:")+"</span>"
                           << "<span class=\"value\">" << hldsdata.GameName << "</span>"
                           << "</div>";
                    // Row 3: Modname
                    condat << "<div class=\"detail-item\">"
                           << "<span class=\"label\">"+tr(_lang,"Modname:")+"</span>"
                           << "<span class=\"value\">" << hldsdata.ModName << "</span>"
                           << "</div>";
                    // Row 4: Mapname
                    condat << "<div class=\"detail-item\">"
                           << "<span class=\"label\">"+tr(_lang,"Mapname:")+"</span>"
                           << "<span class=\"value\">" << hldsdata.MapName << "</span>"
                           << "</div>";
                    // Row 5: Password Protected
                    condat << "<div class=\"detail-item\">"
                           << "<span class=\"label\">"+tr(_lang,"Password:")+"</span>"
                           << "<span class=\"value\">" << (hldsdata.pwProtected ? tr(_lang,"Yes") : tr(_lang,"No")) << "</span>"
                           << "</div>";
                    // Row 6: Players
                    condat << "<div class=\"detail-item\">"
                           << "<span class=\"label\">"+tr(_lang,"Players:")+"</span>"
                condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Gameport:") << "</span>"
                       << "<span class=\"value\">" << d.Port << "</span></div>";
                condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Gamename:") << "</span>"
                       << "<span class=\"value\">" << d.GameName << "</span></div>";
                condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Modname:") << "</span>"
                       << "<span class=\"value\">" << d.ModName << "</span></div>";
                condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Mapname:") << "</span>"
                       << "<span class=\"value\">" << d.MapName << "</span></div>";
                condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Password:") << "</span>"
                       << "<span class=\"value\">" << (d.pwProtected ? tr(_lang,"Yes") : tr(_lang,"No")) << "</span></div>";
                condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Players:") << "</span>"
                       << "<span class=\"value player-count\">"
                           << hldsdata.Players << " (" << hldsdata.BotsAmount << ") / "
                           << hldsdata.MaxPlayers
                           << "</span>"
                           << "</div>";
                    // Close details grid and card
                       << d.Players << " (" << d.BotsAmount << ") / " << d.MaxPlayers
                       << "</span></div>";
            };

            for (auto &srv : HLDS) {
                try {
                    gameinfo::HldsView::HldsData data;
                    rlock.lock();
                    srv.refresh(data);
                    rlock.unlock();
                    renderBaseCard(data);
                    condat << "</div></div>";
                } catch(gameinfo::GameInfoException &e) {
                    std::cerr << e.what();
                    rlock.unlock();
                    continue;
                }
            }

            for (auto &srv : BF1942) {
                try {
                    gameinfo::BF1942View::BF1942Data data;
                    rlock.lock();
                    srv.refresh(data);
                    rlock.unlock();
                    renderBaseCard(data);
                    condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Gametype:") << "</span>"
                           << "<span class=\"value\">" << data.GameType << "</span></div>";
                    condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Gamemode:") << "</span>"
                           << "<span class=\"value\">" << data.GameMode << "</span></div>";
                    condat << "</div></div>";
                } catch(gameinfo::GameInfoException &e) {
                    std::cerr << e.what();
                    rlock.unlock();
                    continue;
                }
            }

            for (auto &srv : COD4) {
                try {
                    gameinfo::Cod4View::Cod4Data data;
                    rlock.lock();
                    srv.refresh(data);
                    rlock.unlock();
                    renderBaseCard(data);
                    condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Gametype:") << "</span>"
                           << "<span class=\"value\">" << data.GameType << "</span></div>";
                    condat << "<div class=\"detail-item\"><span class=\"label\">" << tr(_lang,"Punkbuster:") << "</span>"
                           << "<span class=\"value\">" << (data.punkbuster ? tr(_lang,"Yes") : tr(_lang,"No")) << "</span></div>";
                    condat << "</div></div>";
                } catch(gameinfo::GameInfoException &e) {
                    std::cerr << e.what();
@@ -409,6 +444,8 @@ namespace blogi {
        }
    private:
        std::vector<gameinfo::HldsView>    HLDS;
        std::vector<gameinfo::BF1942View>  BF1942;
        std::vector<gameinfo::Cod4View>    COD4;
    };
};