From 44168a545c3d9810abf93fb47b4b41f28129911e Mon Sep 17 00:00:00 2001 From: gsd Date: Thu, 9 Feb 2023 21:16:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9C=D0=9D=D0=9E=D0=B3=D0=90=20=D0=92=D0=A1?= =?UTF-8?q?=D0=95=D0=93=D0=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controllers/ProfileController.java | 19 +++- .../java/app/controllers/StatsController.java | 2 +- src/main/java/app/entities/PlayerProfile.java | 6 +- src/main/java/app/entities/Stats.java | 96 +++++++++++++++++++ src/main/java/app/entities/db/Ban.java | 24 +++++ src/main/java/app/entities/db/Permition.java | 24 +++++ src/main/java/app/entities/other/SteamID.java | 11 ++- src/main/java/app/entities/server/PlayOn.java | 11 +++ src/main/java/app/entities/server/Server.java | 23 +++++ .../server/players/DefaultPlayer.java | 3 + .../entities/server/players/RCONPlayer.java | 1 - .../java/app/services/ProfileService.java | 33 +++++-- src/main/java/app/services/Stats.java | 31 ------ src/main/java/app/services/db/BanService.java | 7 ++ .../app/services/db/PermitionService.java | 22 +++++ .../services/{ => db}/UsertimeService.java | 3 +- .../java/app/services/io/ServersReader.java | 3 +- .../java/app/updates/BanCountUpdater.java | 3 +- .../java/app/updates/CountriesUpdater.java | 2 +- src/main/java/app/updates/PlayersUpdater.java | 51 +--------- src/main/java/app/updates/UniqueUpdater.java | 2 +- src/main/resources/application.yaml | 2 +- 22 files changed, 278 insertions(+), 101 deletions(-) create mode 100644 src/main/java/app/entities/Stats.java create mode 100644 src/main/java/app/entities/db/Ban.java create mode 100644 src/main/java/app/entities/db/Permition.java create mode 100644 src/main/java/app/entities/server/PlayOn.java delete mode 100644 src/main/java/app/services/Stats.java create mode 100644 src/main/java/app/services/db/BanService.java create mode 100644 src/main/java/app/services/db/PermitionService.java rename src/main/java/app/services/{ => db}/UsertimeService.java (98%) diff --git a/src/main/java/app/controllers/ProfileController.java b/src/main/java/app/controllers/ProfileController.java index 4b72f43..3e01c3e 100644 --- a/src/main/java/app/controllers/ProfileController.java +++ b/src/main/java/app/controllers/ProfileController.java @@ -1,6 +1,7 @@ package app.controllers; import app.services.ProfileService; +import app.entities.Stats; import app.utils.SaltedCookie; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -10,17 +11,22 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RestController @RequestMapping("api/profile") public class ProfileController { private SaltedCookie saltedCookie; private ProfileService profileService; + private Stats stats; @Autowired public ProfileController(SaltedCookie saltedCookie, - ProfileService profileService) { + ProfileService profileService, + Stats stats) { this.saltedCookie = saltedCookie; this.profileService = profileService; + this.stats = stats; } @GetMapping("/current") @@ -32,4 +38,15 @@ public class ProfileController { return new ResponseEntity(profileService.GetProfile(steam64), HttpStatus.OK); } + + @GetMapping("/current/kick") + public ResponseEntity KickCurrentUserFromServers( + @CookieValue(value = "steam64", defaultValue = "") String steam64, + @CookieValue(value = "steam64_secured", defaultValue = "") String steam64_secured + ){ + if(!saltedCookie.Validate(steam64, steam64_secured)) return new ResponseEntity<>(HttpStatus.FORBIDDEN); + + //return new ResponseEntity(stats.kickPlayer(profileService.GetProfile(steam64, List.of()).getPlay_on()), HttpStatus.OK); + return new ResponseEntity<>(HttpStatus.FORBIDDEN); + } } diff --git a/src/main/java/app/controllers/StatsController.java b/src/main/java/app/controllers/StatsController.java index 452770d..332faa9 100644 --- a/src/main/java/app/controllers/StatsController.java +++ b/src/main/java/app/controllers/StatsController.java @@ -1,6 +1,6 @@ package app.controllers; -import app.services.Stats; +import app.entities.Stats; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/app/entities/PlayerProfile.java b/src/main/java/app/entities/PlayerProfile.java index cd0d8d4..3dec742 100644 --- a/src/main/java/app/entities/PlayerProfile.java +++ b/src/main/java/app/entities/PlayerProfile.java @@ -1,8 +1,9 @@ package app.entities; +import app.entities.db.Permition; import app.entities.other.SteamID; +import app.entities.server.PlayOn; import app.entities.steam.SteamData; -import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import java.math.BigDecimal; @@ -13,8 +14,9 @@ public class PlayerProfile { Object ban; HashMap> gametime; HashMap> lastplay; - Object permition; + Permition permition; HashMap response_time; SteamData steam_data; SteamID steamids; + PlayOn play_on; } diff --git a/src/main/java/app/entities/Stats.java b/src/main/java/app/entities/Stats.java new file mode 100644 index 0000000..dd9d97d --- /dev/null +++ b/src/main/java/app/entities/Stats.java @@ -0,0 +1,96 @@ +package app.entities; + +import app.entities.other.SteamID; +import app.entities.server.PlayOn; +import app.entities.server.Server; +import app.entities.server.players.DefaultPlayer; +import app.entities.server.players.RCONPlayer; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.ibasco.agql.protocols.valve.source.query.SourceQueryClient; +import com.ibasco.agql.protocols.valve.source.query.info.SourceQueryInfoResponse; +import com.ibasco.agql.protocols.valve.source.query.players.SourceQueryPlayerResponse; +import com.ibasco.agql.protocols.valve.source.query.rcon.exceptions.RconException; +import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletionException; + +@Data +@Component +@Scope(value = "singleton") +public class Stats { + long ban_count = 0; + int discord_users = 0; + int freevip_players = 0; + int server_uptime = 0; + int vip_players = 0; + int vk_users = 0; + HashMap countries = new HashMap<>(); + HashMap servers = new HashMap<>(); + HashMap uniq = new HashMap<>(); + HashMap updates = new HashMap<>(); + + public void UpdateUniq(String key, Long value) { + uniq.merge(key, value, (x,y) -> y); + } + + public void RefreshServerA2SData(ApplicationContext context, String server_name){ + SourceQueryClient sourceQueryClient = context.getBean(SourceQueryClient.class); + try { + SourceQueryInfoResponse info = sourceQueryClient.getInfo(getServers().get(server_name).getInetAddress()).join(); + getServers().get(server_name).UpdateStatusFromA2S(info); + sourceQueryClient.close(); + } catch (IOException err) { + getServers().get(server_name).SetDownStatus(); + return; + } + if (!getServers().get(server_name).isStatus() || getServers().get(server_name).getPlayer_count() < 1) { + return; + } + //////////////////////////////////////////////////////////////////////// + //If player count > 0 make base player request + //////////////////////////////////////////////////////////////////////// + try { + sourceQueryClient = context.getBean(SourceQueryClient.class); + SourceQueryPlayerResponse players = sourceQueryClient.getPlayers(getServers().get(server_name).getInetAddress()).join(); + getServers().get(server_name).UpdatePlayersFromA2S(players); + sourceQueryClient.close(); + } catch (IOException err) { + return; + } + /////////////////////////////////////////////////////////////////////// + //Extend current players of rcon result + ////////////////////////////////////////////////////////////////////// + try { + String response = getServers().get(server_name).ExecuteRCON(context,"status"); + getServers().get(server_name).UpdatePlayersFromRCON(response); + } catch (RconException | CompletionException err) { + return; + } + } + + /*@JsonIgnore + public PlayOn searchPlayer(SteamID steamID){ + for (Map.Entry stringServerEntry : servers.entrySet()) { + RCONPlayer player = stringServerEntry.getValue().searchPlayer(steamID); + if (player != null) return new PlayOn(stringServerEntry.getKey(), player.getId()); + } + return null; + }*/ + + /*@JsonIgnore + public String kickPlayer(PlayOn playOn){ + if (playOn == null) return ""; + return servers.get(playOn.getServer_id()).ExecuteRCON(applicationContext, "sm_kick #%d kicked from backend".formatted(playOn.getPlayer_id())); + }*/ +} diff --git a/src/main/java/app/entities/db/Ban.java b/src/main/java/app/entities/db/Ban.java new file mode 100644 index 0000000..c00ae1a --- /dev/null +++ b/src/main/java/app/entities/db/Ban.java @@ -0,0 +1,24 @@ +package app.entities.db; + +import lombok.Data; + +import java.math.BigInteger; +import java.sql.Time; +import java.sql.Timestamp; + +@Data +public class Ban { + int id; + String steam_id; + BigInteger account_id; + String player_name; + int ban_length; + String ban_reason; + String banned_by; + String banned_by_id; + String ip; + Timestamp timestamp; + boolean active; + String unbanned_by_id; + Timestamp unbanned_timestamp; +} diff --git a/src/main/java/app/entities/db/Permition.java b/src/main/java/app/entities/db/Permition.java new file mode 100644 index 0000000..e6d4c1d --- /dev/null +++ b/src/main/java/app/entities/db/Permition.java @@ -0,0 +1,24 @@ +package app.entities.db; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +@Data +public class Permition { + @JsonIgnore + int id; + String flags; + long u_timestamp; + int amount; + int immunity; + String status; + + public Permition(Object[] objects) { + id = (int) objects[0]; + flags = (String) objects[1]; + immunity = (int) objects[2]; + status = (String) objects[3]; + amount = (int) objects[4]; + u_timestamp = (long) objects[5]; + } +} diff --git a/src/main/java/app/entities/other/SteamID.java b/src/main/java/app/entities/other/SteamID.java index c94b51e..fa8c64e 100644 --- a/src/main/java/app/entities/other/SteamID.java +++ b/src/main/java/app/entities/other/SteamID.java @@ -3,8 +3,7 @@ package app.entities.other; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @JsonSerialize -public -class SteamID { +public class SteamID { public String steam3; public String steam2; public long steam64; @@ -12,6 +11,9 @@ class SteamID { public long account_id; + public SteamID(){ + } + public SteamID(String steam3, String steam2, String steam64, long account_id) { this.steam3 = steam3; this.steam2 = steam2; @@ -24,4 +26,9 @@ class SteamID { public String toString(){ return steam_url; } + + public boolean is(SteamID steamID){ + if (steam64 == steamID.steam64) return true; + else return false; + } } \ No newline at end of file diff --git a/src/main/java/app/entities/server/PlayOn.java b/src/main/java/app/entities/server/PlayOn.java new file mode 100644 index 0000000..0cd411b --- /dev/null +++ b/src/main/java/app/entities/server/PlayOn.java @@ -0,0 +1,11 @@ +package app.entities.server; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class PlayOn { + String server_id; + int player_id; +} diff --git a/src/main/java/app/entities/server/Server.java b/src/main/java/app/entities/server/Server.java index 0445864..b8cf141 100644 --- a/src/main/java/app/entities/server/Server.java +++ b/src/main/java/app/entities/server/Server.java @@ -1,5 +1,6 @@ package app.entities.server; +import app.entities.other.SteamID; import app.entities.server.players.DefaultPlayer; import app.entities.server.players.RCONPlayer; import com.fasterxml.jackson.annotation.*; @@ -7,8 +8,13 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.ibasco.agql.protocols.valve.source.query.info.SourceQueryInfoResponse; import com.ibasco.agql.protocols.valve.source.query.players.SourcePlayer; import com.ibasco.agql.protocols.valve.source.query.players.SourceQueryPlayerResponse; +import com.ibasco.agql.protocols.valve.source.query.rcon.SourceRconClient; +import com.ibasco.agql.protocols.valve.source.query.rcon.message.SourceRconAuthResponse; +import com.ibasco.agql.protocols.valve.source.query.rcon.message.SourceRconCmdResponse; import jakarta.persistence.criteria.CriteriaBuilder; import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; import java.net.InetSocketAddress; import java.util.ArrayList; @@ -87,10 +93,27 @@ public class Server { } } + @JsonIgnore + public String ExecuteRCON(ApplicationContext context, String command) { + SourceRconClient rconClient = context.getBean(SourceRconClient.class); + SourceRconAuthResponse response = rconClient.authenticate(getInetAddress(), getRcon_password().getBytes()).join(); + if(!response.isAuthenticated()) { + return null; + } + SourceRconCmdResponse res = rconClient.execute(getInetAddress(), command).join(); + rconClient.cleanup(); + return res.getResult(); + } + public void SetDownStatus() { setStatus(false); setMax_players(0); setPlayer_count(0); players.clear(); } + + @JsonIgnore + public RCONPlayer searchPlayer(SteamID steamID){ + return (RCONPlayer) players.stream().filter(player -> player.getSteam().is(steamID)).findFirst().orElse(null); + } } diff --git a/src/main/java/app/entities/server/players/DefaultPlayer.java b/src/main/java/app/entities/server/players/DefaultPlayer.java index f010e14..86cd3b2 100644 --- a/src/main/java/app/entities/server/players/DefaultPlayer.java +++ b/src/main/java/app/entities/server/players/DefaultPlayer.java @@ -1,9 +1,12 @@ package app.entities.server.players; +import app.entities.other.SteamID; import lombok.Data; @Data public class DefaultPlayer { String name; int score; + + SteamID steam = new SteamID(); } diff --git a/src/main/java/app/entities/server/players/RCONPlayer.java b/src/main/java/app/entities/server/players/RCONPlayer.java index eb0d2d8..f0b3b2e 100644 --- a/src/main/java/app/entities/server/players/RCONPlayer.java +++ b/src/main/java/app/entities/server/players/RCONPlayer.java @@ -16,7 +16,6 @@ public class RCONPlayer extends DefaultPlayer { int ping; String state; String steam2; - SteamID steam; public RCONPlayer(List status_line) { id = Integer.parseInt(status_line.get(1)); diff --git a/src/main/java/app/services/ProfileService.java b/src/main/java/app/services/ProfileService.java index d9fc63d..e6f97e2 100644 --- a/src/main/java/app/services/ProfileService.java +++ b/src/main/java/app/services/ProfileService.java @@ -1,15 +1,16 @@ package app.services; -import app.controllers.ProfileController; import app.entities.PlayerProfile; +import app.entities.Stats; import app.entities.other.SteamID; +import app.services.db.PermitionService; +import app.services.db.UsertimeService; import app.services.steam.SteamWebApi; import app.utils.SteamIDConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.Instant; -import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -17,11 +18,17 @@ import java.util.List; public class ProfileService { SteamWebApi steamWebApi; UsertimeService usertimeService; + PermitionService permitionService; + Stats stats; @Autowired public ProfileService(SteamWebApi steamWebApi, - UsertimeService usertimeService) { + UsertimeService usertimeService, + PermitionService permitionService, + Stats stats) { this.steamWebApi = steamWebApi; this.usertimeService = usertimeService; + this.permitionService = permitionService; + this.stats = stats; } public PlayerProfile GetProfile(String steam64, List requests) { @@ -31,6 +38,13 @@ public class ProfileService { profile.setSteamids(steamID); Long start_time, end_time; + + start_time = Instant.now().toEpochMilli(); + //profile.setPlay_on(stats.searchPlayer(steamID)); + end_time = Instant.now().toEpochMilli() - start_time; + profile.getResponse_time().put("play_on", Double.valueOf(end_time) / 1000); + + if(requests.contains("steam_data")){ start_time = Instant.now().toEpochMilli(); profile.setSteam_data(steamWebApi.getSteamData(steamID.steam64)); @@ -40,22 +54,29 @@ public class ProfileService { if(requests.contains("lastplay")){ start_time = Instant.now().toEpochMilli(); - profile.setLastplay(usertimeService.getPlayerLastplay(profile.getSteamids())); + profile.setLastplay(usertimeService.getPlayerLastplay(steamID)); end_time = Instant.now().toEpochMilli() - start_time; profile.getResponse_time().put("lastplay", Double.valueOf(end_time) / 1000); } if(requests.contains("usertime")){ start_time = Instant.now().toEpochMilli(); - profile.setGametime(usertimeService.getPlayerUsertime(profile.getSteamids())); + profile.setGametime(usertimeService.getPlayerUsertime(steamID)); end_time = Instant.now().toEpochMilli() - start_time; profile.getResponse_time().put("usertime", Double.valueOf(end_time) / 1000); } + if(requests.contains("permition")){ + start_time = Instant.now().toEpochMilli(); + profile.setPermition(permitionService.getPermition(steamID)); + end_time = Instant.now().toEpochMilli() - start_time; + profile.getResponse_time().put("permition", Double.valueOf(end_time) / 1000); + } + return profile; } public PlayerProfile GetProfile(String steam64) { - return GetProfile(steam64, List.of("steam_data,lastplay,usertime".split(","))); + return GetProfile(steam64, List.of("steam_data,lastplay,usertime,permition".split(","))); } } diff --git a/src/main/java/app/services/Stats.java b/src/main/java/app/services/Stats.java deleted file mode 100644 index a5435c0..0000000 --- a/src/main/java/app/services/Stats.java +++ /dev/null @@ -1,31 +0,0 @@ -package app.services; - -import app.entities.server.Server; -import lombok.Data; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -@Data -@Component -@Scope(value = "singleton") -public class Stats { - long ban_count = 0; - int discord_users = 0; - int freevip_players = 0; - int server_uptime = 0; - int vip_players = 0; - int vk_users = 0; - HashMap countries = new HashMap<>(); - HashMap servers = new HashMap<>(); - HashMap uniq = new HashMap<>(); - HashMap updates = new HashMap<>(); - - public void UpdateUniq(String key, Long value) { - uniq.merge(key, value, (x,y) -> y); - } -} diff --git a/src/main/java/app/services/db/BanService.java b/src/main/java/app/services/db/BanService.java new file mode 100644 index 0000000..b89ca36 --- /dev/null +++ b/src/main/java/app/services/db/BanService.java @@ -0,0 +1,7 @@ +package app.services.db; + +import org.springframework.stereotype.Service; + +@Service +public class BanService { +} diff --git a/src/main/java/app/services/db/PermitionService.java b/src/main/java/app/services/db/PermitionService.java new file mode 100644 index 0000000..f2b71bf --- /dev/null +++ b/src/main/java/app/services/db/PermitionService.java @@ -0,0 +1,22 @@ +package app.services.db; + +import app.entities.db.Permition; +import app.entities.other.SteamID; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class PermitionService { + @PersistenceContext + EntityManager entityManager; + + public Permition getPermition(SteamID steamID){ + List permitionList = entityManager.createNativeQuery("SELECT id, flags, immunity, status, amount, UNIX_TIMESTAMP(`reg_date`) as u_timestamp FROM sm_admins WHERE `identity` LIKE ?1") + .setParameter(1, steamID.steam2) + .getResultList(); + return permitionList.size() > 0 ? new Permition(permitionList.get(0)) : null; + } +} diff --git a/src/main/java/app/services/UsertimeService.java b/src/main/java/app/services/db/UsertimeService.java similarity index 98% rename from src/main/java/app/services/UsertimeService.java rename to src/main/java/app/services/db/UsertimeService.java index 428e634..3e6797e 100644 --- a/src/main/java/app/services/UsertimeService.java +++ b/src/main/java/app/services/db/UsertimeService.java @@ -1,7 +1,8 @@ -package app.services; +package app.services.db; import app.entities.other.SteamID; import app.entities.server.Server; +import app.entities.Stats; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/app/services/io/ServersReader.java b/src/main/java/app/services/io/ServersReader.java index 1711798..7d9551f 100644 --- a/src/main/java/app/services/io/ServersReader.java +++ b/src/main/java/app/services/io/ServersReader.java @@ -1,10 +1,9 @@ package app.services.io; import app.entities.server.Server; -import app.services.Stats; +import app.entities.Stats; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/src/main/java/app/updates/BanCountUpdater.java b/src/main/java/app/updates/BanCountUpdater.java index 31c135b..c75c584 100644 --- a/src/main/java/app/updates/BanCountUpdater.java +++ b/src/main/java/app/updates/BanCountUpdater.java @@ -1,6 +1,6 @@ package app.updates; -import app.services.Stats; +import app.entities.Stats; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -8,7 +8,6 @@ import org.jobrunr.scheduling.JobScheduler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; import java.time.Instant; diff --git a/src/main/java/app/updates/CountriesUpdater.java b/src/main/java/app/updates/CountriesUpdater.java index 27819cd..5709e05 100644 --- a/src/main/java/app/updates/CountriesUpdater.java +++ b/src/main/java/app/updates/CountriesUpdater.java @@ -2,7 +2,7 @@ package app.updates; import app.entities.server.Server; import app.services.io.GeoIP; -import app.services.Stats; +import app.entities.Stats; import com.maxmind.geoip2.exception.GeoIp2Exception; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; diff --git a/src/main/java/app/updates/PlayersUpdater.java b/src/main/java/app/updates/PlayersUpdater.java index c59f80e..f4e0fc0 100644 --- a/src/main/java/app/updates/PlayersUpdater.java +++ b/src/main/java/app/updates/PlayersUpdater.java @@ -1,13 +1,6 @@ package app.updates; -import app.services.Stats; -import com.ibasco.agql.protocols.valve.source.query.SourceQueryClient; -import com.ibasco.agql.protocols.valve.source.query.info.SourceQueryInfoResponse; -import com.ibasco.agql.protocols.valve.source.query.players.SourceQueryPlayerResponse; -import com.ibasco.agql.protocols.valve.source.query.rcon.SourceRconClient; -import com.ibasco.agql.protocols.valve.source.query.rcon.exceptions.RconException; -import com.ibasco.agql.protocols.valve.source.query.rcon.message.SourceRconAuthResponse; -import com.ibasco.agql.protocols.valve.source.query.rcon.message.SourceRconCmdResponse; +import app.entities.Stats; import jakarta.annotation.PostConstruct; import org.jobrunr.jobs.annotations.Job; import org.jobrunr.scheduling.JobScheduler; @@ -16,9 +9,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; -import java.io.IOException; -import java.util.concurrent.CompletionException; - @Component public class PlayersUpdater { Stats stats; @@ -49,43 +39,6 @@ public class PlayersUpdater { @Job(name = "Update A2S data on: %0") public void UpdatePlayersOnServer(String server_name) { - SourceQueryClient sourceQueryClient = context.getBean(SourceQueryClient.class); - try { - SourceQueryInfoResponse info = sourceQueryClient.getInfo(stats.getServers().get(server_name).getInetAddress()).join(); - stats.getServers().get(server_name).UpdateStatusFromA2S(info); - sourceQueryClient.close(); - } catch (IOException err) { - stats.getServers().get(server_name).SetDownStatus(); - return; - } - if (!stats.getServers().get(server_name).isStatus() || stats.getServers().get(server_name).getPlayer_count() < 1) { - return; - } - //////////////////////////////////////////////////////////////////////// - //If player count > 0 make base player request - //////////////////////////////////////////////////////////////////////// - try { - sourceQueryClient = context.getBean(SourceQueryClient.class); - SourceQueryPlayerResponse players = sourceQueryClient.getPlayers(stats.getServers().get(server_name).getInetAddress()).join(); - stats.getServers().get(server_name).UpdatePlayersFromA2S(players); - sourceQueryClient.close(); - } catch (IOException err) { - return; - } - /////////////////////////////////////////////////////////////////////// - //Extend current players of rcon result - ////////////////////////////////////////////////////////////////////// - try { - SourceRconClient rcon_client = context.getBean(SourceRconClient.class); - SourceRconAuthResponse response = rcon_client.authenticate(stats.getServers().get(server_name).getInetAddress(), stats.getServers().get(server_name).getRcon_password().getBytes()).join(); - if(!response.isAuthenticated()) { - return; - } - SourceRconCmdResponse rcon_response = rcon_client.execute(stats.getServers().get(server_name).getInetAddress(), "status").join(); - rcon_client.cleanup(); - stats.getServers().get(server_name).UpdatePlayersFromRCON(rcon_response.getResult()); - } catch (RconException | CompletionException err) { - return; - } + stats.RefreshServerA2SData(context, server_name); } } diff --git a/src/main/java/app/updates/UniqueUpdater.java b/src/main/java/app/updates/UniqueUpdater.java index a373c0b..d46feae 100644 --- a/src/main/java/app/updates/UniqueUpdater.java +++ b/src/main/java/app/updates/UniqueUpdater.java @@ -1,7 +1,7 @@ package app.updates; import app.entities.server.Server; -import app.services.Stats; +import app.entities.Stats; import jakarta.annotation.PostConstruct; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index b0b9094..69668d6 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -28,7 +28,7 @@ backend: unique_global: false unique_server: false ban_count: false - a2s: false + a2s: true countries: false auth: salt: ${AUTH_SALT}