mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-12-23 00:51:01 +03:00
[FEATURE][EXPERIMENTAL] PingServerReportRequest
This commit is contained in:
parent
4502f978fb
commit
3ad7002da7
8 changed files with 174 additions and 7 deletions
|
@ -14,10 +14,7 @@
|
||||||
import pro.gravit.launchserver.config.LaunchServerConfig;
|
import pro.gravit.launchserver.config.LaunchServerConfig;
|
||||||
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
import pro.gravit.launchserver.config.LaunchServerRuntimeConfig;
|
||||||
import pro.gravit.launchserver.launchermodules.LauncherModuleLoader;
|
import pro.gravit.launchserver.launchermodules.LauncherModuleLoader;
|
||||||
import pro.gravit.launchserver.manangers.CertificateManager;
|
import pro.gravit.launchserver.manangers.*;
|
||||||
import pro.gravit.launchserver.manangers.MirrorManager;
|
|
||||||
import pro.gravit.launchserver.manangers.ReconfigurableManager;
|
|
||||||
import pro.gravit.launchserver.manangers.SessionManager;
|
|
||||||
import pro.gravit.launchserver.manangers.hook.AuthHookManager;
|
import pro.gravit.launchserver.manangers.hook.AuthHookManager;
|
||||||
import pro.gravit.launchserver.modules.events.LaunchServerFullInitEvent;
|
import pro.gravit.launchserver.modules.events.LaunchServerFullInitEvent;
|
||||||
import pro.gravit.launchserver.modules.events.LaunchServerInitPhase;
|
import pro.gravit.launchserver.modules.events.LaunchServerInitPhase;
|
||||||
|
@ -82,6 +79,7 @@ public final class LaunchServer implements Runnable, AutoCloseable, Reconfigurab
|
||||||
public final MirrorManager mirrorManager;
|
public final MirrorManager mirrorManager;
|
||||||
public final ReconfigurableManager reconfigurableManager;
|
public final ReconfigurableManager reconfigurableManager;
|
||||||
public final ConfigManager configManager;
|
public final ConfigManager configManager;
|
||||||
|
public final PingServerManager pingServerManager;
|
||||||
// HWID ban + anti-brutforce
|
// HWID ban + anti-brutforce
|
||||||
public final CertificateManager certificateManager;
|
public final CertificateManager certificateManager;
|
||||||
public final ProguardConf proguardConf;
|
public final ProguardConf proguardConf;
|
||||||
|
@ -146,6 +144,7 @@ public LaunchServer(LaunchServerDirectories directories, LaunchServerEnv env, La
|
||||||
reconfigurableManager = new ReconfigurableManager();
|
reconfigurableManager = new ReconfigurableManager();
|
||||||
authHookManager = new AuthHookManager();
|
authHookManager = new AuthHookManager();
|
||||||
configManager = new ConfigManager();
|
configManager = new ConfigManager();
|
||||||
|
pingServerManager = new PingServerManager(this);
|
||||||
//Generate or set new Certificate API
|
//Generate or set new Certificate API
|
||||||
certificateManager.orgName = config.projectName;
|
certificateManager.orgName = config.projectName;
|
||||||
if (config.certificate != null && config.certificate.enabled) {
|
if (config.certificate != null && config.certificate.enabled) {
|
||||||
|
@ -389,6 +388,8 @@ public void syncProfilesDir() throws IOException {
|
||||||
// Sort and set new profiles
|
// Sort and set new profiles
|
||||||
newProfies.sort(Comparator.comparing(a -> a));
|
newProfies.sort(Comparator.comparing(a -> a));
|
||||||
profilesList = Collections.unmodifiableList(newProfies);
|
profilesList = Collections.unmodifiableList(newProfies);
|
||||||
|
if(pingServerManager != null)
|
||||||
|
pingServerManager.syncServers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void syncUpdatesDir(Collection<String> dirs) throws IOException {
|
public void syncUpdatesDir(Collection<String> dirs) throws IOException {
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package pro.gravit.launchserver.manangers;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.profiles.ClientProfile;
|
||||||
|
import pro.gravit.launcher.request.management.PingServerReportRequest;
|
||||||
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class PingServerManager {
|
||||||
|
public static class ServerInfoEntry
|
||||||
|
{
|
||||||
|
public PingServerReportRequest.PingServerReport lastReport;
|
||||||
|
public long lastReportTime;
|
||||||
|
|
||||||
|
public ServerInfoEntry(PingServerReportRequest.PingServerReport lastReport) {
|
||||||
|
this.lastReport = lastReport;
|
||||||
|
this.lastReportTime = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerInfoEntry() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public final Map<String, ServerInfoEntry> map = new HashMap<>();
|
||||||
|
private final LaunchServer server;
|
||||||
|
|
||||||
|
public PingServerManager(LaunchServer server) {
|
||||||
|
this.server = server;
|
||||||
|
}
|
||||||
|
public void syncServers()
|
||||||
|
{
|
||||||
|
server.getProfiles().forEach((p) -> {
|
||||||
|
for(ClientProfile.ServerProfile sp : p.getServers())
|
||||||
|
{
|
||||||
|
ServerInfoEntry entry = map.get(sp.name);
|
||||||
|
if(entry == null)
|
||||||
|
{
|
||||||
|
map.put(sp.name, new ServerInfoEntry());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
public boolean updateServer(String name, PingServerReportRequest.PingServerReport report)
|
||||||
|
{
|
||||||
|
ServerInfoEntry entry = map.get(name);
|
||||||
|
if(entry == null)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
entry.lastReportTime = System.currentTimeMillis();
|
||||||
|
entry.lastReport = report;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
import pro.gravit.launchserver.socket.response.SimpleResponse;
|
import pro.gravit.launchserver.socket.response.SimpleResponse;
|
||||||
import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
|
import pro.gravit.launchserver.socket.response.WebSocketServerResponse;
|
||||||
import pro.gravit.launchserver.socket.response.auth.*;
|
import pro.gravit.launchserver.socket.response.auth.*;
|
||||||
|
import pro.gravit.launchserver.socket.response.management.PingServerReportResponse;
|
||||||
import pro.gravit.launchserver.socket.response.management.ServerStatusResponse;
|
import pro.gravit.launchserver.socket.response.management.ServerStatusResponse;
|
||||||
import pro.gravit.launchserver.socket.response.profile.BatchProfileByUsername;
|
import pro.gravit.launchserver.socket.response.profile.BatchProfileByUsername;
|
||||||
import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse;
|
import pro.gravit.launchserver.socket.response.profile.ProfileByUUIDResponse;
|
||||||
|
@ -85,6 +86,7 @@ public static void registerResponses() {
|
||||||
providers.register("securityReport", SecurityReportResponse.class);
|
providers.register("securityReport", SecurityReportResponse.class);
|
||||||
providers.register("hardwareReport", HardwareReportResponse.class);
|
providers.register("hardwareReport", HardwareReportResponse.class);
|
||||||
providers.register("serverStatus", ServerStatusResponse.class);
|
providers.register("serverStatus", ServerStatusResponse.class);
|
||||||
|
providers.register("pingServerReport", PingServerReportResponse.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void process(ChannelHandlerContext ctx, TextWebSocketFrame frame, Client client, String ip) {
|
public void process(ChannelHandlerContext ctx, TextWebSocketFrame frame, Client client, String ip) {
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
package pro.gravit.launchserver.socket.response.management;
|
||||||
|
|
||||||
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
|
import pro.gravit.launcher.ClientPermissions;
|
||||||
|
import pro.gravit.launcher.events.request.PingServerReportRequestEvent;
|
||||||
|
import pro.gravit.launcher.request.management.PingServerReportRequest;
|
||||||
|
import pro.gravit.launchserver.socket.Client;
|
||||||
|
import pro.gravit.launchserver.socket.response.SimpleResponse;
|
||||||
|
|
||||||
|
public class PingServerReportResponse extends SimpleResponse {
|
||||||
|
public PingServerReportRequest.PingServerReport data;
|
||||||
|
public String name;
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return "pingServerReport";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(ChannelHandlerContext ctx, Client client) throws Exception {
|
||||||
|
if(!client.isAuth || client.permissions == null || !client.permissions.isPermission(ClientPermissions.PermissionConsts.MANAGEMENT))
|
||||||
|
{
|
||||||
|
sendError("Access denied");
|
||||||
|
}
|
||||||
|
server.pingServerManager.updateServer(name, data);
|
||||||
|
sendResult(new PingServerReportRequestEvent());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package pro.gravit.launcher.events.request;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.events.RequestEvent;
|
||||||
|
|
||||||
|
public class PingServerReportRequestEvent extends RequestEvent {
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return "pingServerReport";
|
||||||
|
}
|
||||||
|
}
|
|
@ -60,8 +60,10 @@ public final class ClientProfile implements Comparable<ClientProfile> {
|
||||||
private String title;
|
private String title;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private String info;
|
private String info;
|
||||||
|
@Deprecated
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private String serverAddress;
|
private String serverAddress;
|
||||||
|
@Deprecated
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private int serverPort;
|
private int serverPort;
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
|
@ -70,6 +72,24 @@ public final class ClientProfile implements Comparable<ClientProfile> {
|
||||||
@LauncherNetworkAPI
|
@LauncherNetworkAPI
|
||||||
private String mainClass;
|
private String mainClass;
|
||||||
|
|
||||||
|
public static class ServerProfile
|
||||||
|
{
|
||||||
|
public String name;
|
||||||
|
public String serverAddress;
|
||||||
|
public int serverPort;
|
||||||
|
public boolean isDefault = true;
|
||||||
|
}
|
||||||
|
@LauncherNetworkAPI
|
||||||
|
private List<ServerProfile> servers = new ArrayList<>(1);
|
||||||
|
public ServerProfile getDefaultServerProfile()
|
||||||
|
{
|
||||||
|
for(ServerProfile profile : servers)
|
||||||
|
{
|
||||||
|
if(profile.isDefault) return profile;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(ClientProfile o) {
|
public int compareTo(ClientProfile o) {
|
||||||
return Integer.compare(getSortIndex(), o.getSortIndex());
|
return Integer.compare(getSortIndex(), o.getSortIndex());
|
||||||
|
@ -131,8 +151,13 @@ public String getMainClass() {
|
||||||
return mainClass;
|
return mainClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<ServerProfile> getServers() {
|
||||||
|
return servers;
|
||||||
|
}
|
||||||
|
|
||||||
public String getServerAddress() {
|
public String getServerAddress() {
|
||||||
return serverAddress;
|
ServerProfile profile = getDefaultServerProfile();
|
||||||
|
return profile == null ? "localhost" : profile.serverAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<OptionalFile> getOptional() {
|
public Set<OptionalFile> getOptional() {
|
||||||
|
@ -245,9 +270,10 @@ public void pushOptionalClassPath(pushOptionalClassPathCallback callback) throws
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getServerPort() {
|
public int getServerPort() {
|
||||||
return serverPort;
|
ServerProfile profile = getDefaultServerProfile();
|
||||||
|
return profile == null ? 25565 : profile.serverPort;
|
||||||
}
|
}
|
||||||
|
@Deprecated
|
||||||
public InetSocketAddress getServerSocketAddress() {
|
public InetSocketAddress getServerSocketAddress() {
|
||||||
return InetSocketAddress.createUnresolved(getServerAddress(), getServerPort());
|
return InetSocketAddress.createUnresolved(getServerAddress(), getServerPort());
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package pro.gravit.launcher.request.management;
|
||||||
|
|
||||||
|
import pro.gravit.launcher.events.request.PingServerReportRequestEvent;
|
||||||
|
import pro.gravit.launcher.request.Request;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PingServerReportRequest extends Request<PingServerReportRequestEvent> {
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return "pingServerReport";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PingServerReport
|
||||||
|
{
|
||||||
|
public final String name;
|
||||||
|
public final int maxPlayers; // player slots
|
||||||
|
public final int playersOnline;
|
||||||
|
public static class UsernameInfo
|
||||||
|
{
|
||||||
|
public final String username;
|
||||||
|
|
||||||
|
public UsernameInfo(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//Server addional info
|
||||||
|
public double tps; //Server tps
|
||||||
|
public List<UsernameInfo> users;
|
||||||
|
|
||||||
|
public PingServerReport(String name, int maxPlayers, int playersOnline) {
|
||||||
|
this.name = name;
|
||||||
|
this.maxPlayers = maxPlayers;
|
||||||
|
this.playersOnline = playersOnline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public final String name;
|
||||||
|
public final PingServerReport data;
|
||||||
|
|
||||||
|
public PingServerReportRequest(String name, PingServerReport data) {
|
||||||
|
this.name = name;
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
|
@ -101,6 +101,8 @@ public void registerResults() {
|
||||||
results.register("verifySecureLevelKey", VerifySecureLevelKeyRequestEvent.class);
|
results.register("verifySecureLevelKey", VerifySecureLevelKeyRequestEvent.class);
|
||||||
results.register("securityReport", SecurityReportRequestEvent.class);
|
results.register("securityReport", SecurityReportRequestEvent.class);
|
||||||
results.register("hardwareReport", HardwareReportRequestEvent.class);
|
results.register("hardwareReport", HardwareReportRequestEvent.class);
|
||||||
|
results.register("serverStatus", ServerStatusRequestEvent.class);
|
||||||
|
results.register("pingServerReport", PingServerReportRequestEvent.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void waitIfNotConnected() {
|
public void waitIfNotConnected() {
|
||||||
|
|
Loading…
Reference in a new issue