Loading plugins/gameinfo/gameinfo.cpp +89 −52 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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; Loading Loading @@ -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(); Loading @@ -409,6 +444,8 @@ namespace blogi { } private: std::vector<gameinfo::HldsView> HLDS; std::vector<gameinfo::BF1942View> BF1942; std::vector<gameinfo::Cod4View> COD4; }; }; Loading Loading
plugins/gameinfo/gameinfo.cpp +89 −52 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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; Loading Loading @@ -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(); Loading @@ -409,6 +444,8 @@ namespace blogi { } private: std::vector<gameinfo::HldsView> HLDS; std::vector<gameinfo::BF1942View> BF1942; std::vector<gameinfo::Cod4View> COD4; }; }; Loading