Skip to content

Commit dffcfc3

Browse files
committed
[FEATURE] Support multiple prestarter build
1 parent e7a1a97 commit dffcfc3

12 files changed

Lines changed: 128 additions & 49 deletions

File tree

components/launcher-api/src/main/java/pro/gravit/launcher/base/request/update/LauncherRequest.java

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import pro.gravit.launcher.base.request.Request;
77
import pro.gravit.launcher.base.request.RequestService;
88
import pro.gravit.launcher.base.request.websockets.WebSocketRequest;
9+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
910
import pro.gravit.utils.helper.IOHelper;
11+
import pro.gravit.utils.helper.JVMHelper;
1012
import pro.gravit.utils.helper.LogHelper;
1113
import pro.gravit.utils.helper.SecurityHelper;
1214

@@ -15,15 +17,15 @@
1517

1618
public final class LauncherRequest extends Request<LauncherRequestEvent> implements WebSocketRequest {
1719
public static final Path BINARY_PATH = IOHelper.getCodeSource(Launcher.class);
18-
public static final boolean EXE_BINARY = IOHelper.hasExtension(BINARY_PATH, "exe");
20+
public static final boolean JAR_BINARY = IOHelper.hasExtension(BINARY_PATH, "jar");
1921
@LauncherNetworkAPI
2022
public final String secureHash;
2123
@LauncherNetworkAPI
2224
public final String secureSalt;
2325
@LauncherNetworkAPI
2426
public byte[] digest;
2527
@LauncherNetworkAPI
26-
public int launcher_type = EXE_BINARY ? 2 : 1;
28+
public CoreFeatureAPI.UpdateVariant variant;
2729

2830

2931
public LauncherRequest() {
@@ -35,6 +37,64 @@ public LauncherRequest() {
3537
}
3638
secureHash = Launcher.getConfig().secureCheckHash;
3739
secureSalt = Launcher.getConfig().secureCheckSalt;
40+
variant = getUpdateVariant();
41+
}
42+
43+
public static CoreFeatureAPI.UpdateVariant getUpdateVariant() {
44+
if(JAR_BINARY) {
45+
return CoreFeatureAPI.UpdateVariant.JAR;
46+
}
47+
switch (JVMHelper.OS_TYPE) {
48+
case MUSTDIE -> {
49+
switch (JVMHelper.ARCH_TYPE) {
50+
case X86 -> {
51+
return CoreFeatureAPI.UpdateVariant.EXE_WINDOWS_X86;
52+
}
53+
case X86_64 -> {
54+
return CoreFeatureAPI.UpdateVariant.EXE_WINDOWS_X86_64;
55+
}
56+
case ARM64 -> {
57+
return CoreFeatureAPI.UpdateVariant.EXE_WINDOWS_ARM64;
58+
}
59+
default -> {
60+
return CoreFeatureAPI.UpdateVariant.JAR; // Unsupported
61+
}
62+
}
63+
}
64+
case LINUX -> {
65+
switch (JVMHelper.ARCH_TYPE) {
66+
case X86 -> {
67+
return CoreFeatureAPI.UpdateVariant.LINUX_X86;
68+
}
69+
case X86_64 -> {
70+
return CoreFeatureAPI.UpdateVariant.LINUX_X86_64;
71+
}
72+
case ARM64 -> {
73+
return CoreFeatureAPI.UpdateVariant.LINUX_ARM64;
74+
}
75+
case ARM32 -> {
76+
return CoreFeatureAPI.UpdateVariant.LINUX_ARM32;
77+
}
78+
default -> {
79+
return CoreFeatureAPI.UpdateVariant.JAR; // Unsupported
80+
}
81+
}
82+
}
83+
case MACOSX -> {
84+
switch (JVMHelper.ARCH_TYPE) {
85+
case X86_64 -> {
86+
return CoreFeatureAPI.UpdateVariant.MACOS_X86_64;
87+
}
88+
case ARM64 -> {
89+
return CoreFeatureAPI.UpdateVariant.MACOS_ARM64;
90+
}
91+
default -> {
92+
return CoreFeatureAPI.UpdateVariant.JAR; // Unsupported
93+
}
94+
}
95+
}
96+
}
97+
return CoreFeatureAPI.UpdateVariant.JAR;
3898
}
3999

40100
@Override

components/launcher-core/src/main/java/pro/gravit/launcher/core/api/features/CoreFeatureAPI.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,11 @@ public interface CoreFeatureAPI {
1010
CompletableFuture<LauncherUpdateInfo> checkUpdates();
1111

1212
record LauncherUpdateInfo(String url, String version, boolean available, boolean required) {}
13+
14+
enum UpdateVariant {
15+
JAR,
16+
EXE_WINDOWS_X86_64, EXE_WINDOWS_X86, EXE_WINDOWS_ARM64,
17+
LINUX_X86, LINUX_X86_64, LINUX_ARM64, LINUX_ARM32,
18+
MACOS_X86_64, MACOS_ARM64
19+
}
1320
}

components/launchserver/src/main/java/pro/gravit/launchserver/LaunchServer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
import org.apache.logging.log4j.Logger;
55
import pro.gravit.launcher.base.modules.events.ClosePhase;
66
import pro.gravit.launcher.base.profiles.ClientProfile;
7+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
78
import pro.gravit.launchserver.auth.AuthProviderPair;
89
import pro.gravit.launchserver.auth.core.RejectAuthCoreProvider;
910
import pro.gravit.launchserver.auth.updates.UpdatesProvider;
10-
import pro.gravit.launchserver.binary.EXELauncherBinary;
1111
import pro.gravit.launchserver.binary.JARLauncherBinary;
1212
import pro.gravit.launchserver.binary.LauncherBinary;
1313
import pro.gravit.launchserver.binary.PipelineContext;
@@ -86,7 +86,7 @@ public final class LaunchServer implements Runnable, AutoCloseable, Reconfigurab
8686
/**
8787
* Pipeline for building JAR
8888
*/
89-
public final Map<UpdatesProvider.UpdateVariant, LauncherBinary> launcherBinaries;
89+
public final Map<CoreFeatureAPI.UpdateVariant, LauncherBinary> launcherBinaries;
9090
// Server config
9191
public final AuthHookManager authHookManager;
9292
public final LaunchServerModulesManager modulesManager;
@@ -302,7 +302,7 @@ public Path createTempFilePath(String name, String ext) throws IOException {
302302

303303
private void collectBinary() throws IOException {
304304
launcherBinaries.clear();
305-
launcherBinaries.put(UpdatesProvider.UpdateVariant.JAR, new JARLauncherBinary(this));
305+
launcherBinaries.put(CoreFeatureAPI.UpdateVariant.JAR, new JARLauncherBinary(this));
306306
LaunchServerLauncherBinaryInit event = new LaunchServerLauncherBinaryInit(this, launcherBinaries);
307307
modulesManager.invokeEvent(event);
308308
for(var e : launcherBinaries.values()) {

components/launchserver/src/main/java/pro/gravit/launchserver/auth/updates/LocalUpdatesProvider.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.apache.logging.log4j.Logger;
55
import pro.gravit.launcher.base.config.JsonConfigurable;
66
import pro.gravit.launcher.base.config.SimpleConfigurable;
7+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
78
import pro.gravit.launchserver.LaunchServer;
89
import pro.gravit.utils.helper.IOHelper;
910
import pro.gravit.utils.helper.SecurityHelper;
@@ -18,12 +19,12 @@ public class LocalUpdatesProvider extends UpdatesProvider {
1819
public String updatesDir = "updates";
1920
public String binaryName = "Launcher";
2021
public String buildSecretsFile = "build-secrets.json";
21-
public Map<UpdateVariant, String> urls = new HashMap<>(Map.of(
22-
UpdateVariant.JAR, "http://localhost:9274/Launcher.jar",
23-
UpdateVariant.EXE, "http://localhost:9274/Launcher.exe"
22+
public Map<CoreFeatureAPI.UpdateVariant, String> urls = new HashMap<>(Map.of(
23+
CoreFeatureAPI.UpdateVariant.JAR, "http://localhost:9274/Launcher.jar",
24+
CoreFeatureAPI.UpdateVariant.EXE_WINDOWS_X86_64, "http://localhost:9274/Launcher.exe"
2425
));
2526
public transient JsonConfigurable<BuildSecretsInfo> buildSecretsJson;
26-
private final transient Map<UpdateVariant, byte[]> hashMap = new HashMap<>();
27+
private final transient Map<CoreFeatureAPI.UpdateVariant, byte[]> hashMap = new HashMap<>();
2728

2829
@Override
2930
public void init(LaunchServer server) {
@@ -39,8 +40,8 @@ public void init(LaunchServer server) {
3940
buildSecretsJson.setConfig(buildSecretsJson.getDefaultConfig());
4041
}
4142
try {
42-
sync(UpdateVariant.JAR);
43-
sync(UpdateVariant.EXE);
43+
sync(CoreFeatureAPI.UpdateVariant.JAR);
44+
sync(CoreFeatureAPI.UpdateVariant.EXE_WINDOWS_X86_64);
4445
} catch (IOException e) {
4546
logger.error("Error when syncing binaries", e);
4647
}
@@ -56,7 +57,7 @@ public void pushUpdate(List<UpdateUploadInfo> files) throws IOException {
5657
buildSecretsJson.saveConfig();
5758
}
5859

59-
public void sync(UpdateVariant variant) throws IOException {
60+
public void sync(CoreFeatureAPI.UpdateVariant variant) throws IOException {
6061
var source = getUpdate(variant);
6162
if(!Files.exists(source)) {
6263
logger.warn("Dont exist {} binary", variant);
@@ -66,15 +67,33 @@ public void sync(UpdateVariant variant) throws IOException {
6667
hashMap.put(variant, hash);
6768
}
6869

69-
public Path getUpdate(UpdateVariant variant) {
70+
public Path getUpdate(CoreFeatureAPI.UpdateVariant variant) {
7071
String fileName;
7172
switch (variant) {
7273
case JAR -> {
7374
fileName = binaryName.concat(".jar");
7475
}
75-
case EXE -> {
76+
case EXE_WINDOWS_X86_64 -> {
7677
fileName = binaryName.concat(".exe");
7778
}
79+
case EXE_WINDOWS_X86 -> {
80+
fileName = binaryName.concat("_x32.exe");
81+
}
82+
case EXE_WINDOWS_ARM64 -> {
83+
fileName = binaryName.concat("_arm64.exe");
84+
}
85+
case LINUX_X86_64 -> {
86+
fileName = binaryName.concat("_linux");
87+
}
88+
case LINUX_ARM64 -> {
89+
fileName = binaryName.concat("_linux_arm64");
90+
}
91+
case MACOS_X86_64 -> {
92+
fileName = binaryName.concat("_macos");
93+
}
94+
case MACOS_ARM64 -> {
95+
fileName = binaryName.concat("_macos_arm64");
96+
}
7897
default -> {
7998
fileName = binaryName;
8099
}
@@ -83,7 +102,7 @@ public Path getUpdate(UpdateVariant variant) {
83102
}
84103

85104
@Override
86-
public UpdateInfo checkUpdates(UpdateVariant variant, BuildSecretsCheck buildSecretsCheck) {
105+
public UpdateInfo checkUpdates(CoreFeatureAPI.UpdateVariant variant, BuildSecretsCheck buildSecretsCheck) {
87106
byte[] hash = hashMap.get(variant);
88107
if (hash == null) {
89108
return null; // We dont have this file
@@ -95,17 +114,17 @@ public UpdateInfo checkUpdates(UpdateVariant variant, BuildSecretsCheck buildSec
95114
}
96115

97116
public static final class BuildSecretsInfo {
98-
private Map<UpdateVariant, BuildSecrets> secrets = new HashMap<>();
117+
private Map<CoreFeatureAPI.UpdateVariant, BuildSecrets> secrets = new HashMap<>();
99118

100-
public BuildSecretsInfo(Map<UpdateVariant, BuildSecrets> secrets) {
119+
public BuildSecretsInfo(Map<CoreFeatureAPI.UpdateVariant, BuildSecrets> secrets) {
101120
this.secrets = secrets;
102121
}
103122

104123
public BuildSecretsInfo() {
105124

106125
}
107126

108-
public Map<UpdateVariant, BuildSecrets> secrets() {
127+
public Map<CoreFeatureAPI.UpdateVariant, BuildSecrets> secrets() {
109128
return secrets;
110129
}
111130

components/launchserver/src/main/java/pro/gravit/launchserver/auth/updates/UpdatesProvider.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package pro.gravit.launchserver.auth.updates;
22

3+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
34
import pro.gravit.launchserver.LaunchServer;
45
import pro.gravit.utils.ProviderMap;
56
import pro.gravit.utils.helper.SecurityHelper;
67

78
import java.io.IOException;
8-
import java.net.URL;
99
import java.nio.file.Path;
1010
import java.util.Arrays;
1111
import java.util.Base64;
1212
import java.util.List;
13-
import java.util.Map;
1413

1514
public abstract class UpdatesProvider {
1615

@@ -30,7 +29,7 @@ public void init(LaunchServer server) {
3029
}
3130

3231
public abstract void pushUpdate(List<UpdateUploadInfo> files) throws IOException;
33-
public abstract UpdateInfo checkUpdates(UpdateVariant variant, BuildSecretsCheck buildSecretsCheck);
32+
public abstract UpdateInfo checkUpdates(CoreFeatureAPI.UpdateVariant variant, BuildSecretsCheck buildSecretsCheck);
3433

3534
protected boolean checkSecureHash(String secureHash, String secureSalt, String privateSecureToken) {
3635
if (secureHash == null || secureSalt == null) return false;
@@ -43,15 +42,11 @@ protected boolean checkSecureHash(String secureHash, String secureSalt, String p
4342
public void close() {
4443
}
4544

46-
public enum UpdateVariant {
47-
JAR, EXE
48-
}
49-
5045
public record UpdateInfo(String url) {
5146

5247
}
5348

54-
public record UpdateUploadInfo(Path path, UpdateVariant variant, BuildSecrets secrets) {
49+
public record UpdateUploadInfo(Path path, CoreFeatureAPI.UpdateVariant variant, BuildSecrets secrets) {
5550

5651
}
5752

components/launchserver/src/main/java/pro/gravit/launchserver/binary/EXELauncherBinary.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package pro.gravit.launchserver.binary;
22

3+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
34
import pro.gravit.launchserver.LaunchServer;
4-
import pro.gravit.launchserver.auth.updates.UpdatesProvider;
5-
import pro.gravit.utils.helper.IOHelper;
65

76
import java.io.IOException;
8-
import java.nio.file.Files;
97

108
public class EXELauncherBinary extends LauncherBinary {
119

@@ -14,8 +12,8 @@ public EXELauncherBinary(LaunchServer server) {
1412
}
1513

1614
@Override
17-
public UpdatesProvider.UpdateVariant getVariant() {
18-
return UpdatesProvider.UpdateVariant.EXE;
15+
public CoreFeatureAPI.UpdateVariant getVariant() {
16+
return CoreFeatureAPI.UpdateVariant.EXE_WINDOWS_X86_64;
1917
}
2018

2119
@Override

components/launchserver/src/main/java/pro/gravit/launchserver/binary/JARLauncherBinary.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package pro.gravit.launchserver.binary;
22

33
import pro.gravit.launcher.base.Launcher;
4+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
45
import pro.gravit.launchserver.LaunchServer;
5-
import pro.gravit.launchserver.auth.updates.UpdatesProvider;
66
import pro.gravit.launchserver.binary.tasks.*;
77

88
import java.io.IOException;
@@ -38,8 +38,8 @@ public JARLauncherBinary(LaunchServer server) throws IOException {
3838
}
3939

4040
@Override
41-
public UpdatesProvider.UpdateVariant getVariant() {
42-
return UpdatesProvider.UpdateVariant.JAR;
41+
public CoreFeatureAPI.UpdateVariant getVariant() {
42+
return CoreFeatureAPI.UpdateVariant.JAR;
4343
}
4444

4545
@Override

components/launchserver/src/main/java/pro/gravit/launchserver/binary/LauncherBinary.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package pro.gravit.launchserver.binary;
22

3+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
34
import pro.gravit.launchserver.LaunchServer;
4-
import pro.gravit.launchserver.auth.updates.UpdatesProvider;
55
import pro.gravit.launchserver.binary.tasks.LauncherBuildTask;
6-
import pro.gravit.utils.helper.IOHelper;
7-
import pro.gravit.utils.helper.SecurityHelper;
86

97
import java.io.IOException;
108
import java.nio.file.Path;
11-
import java.util.List;
12-
import java.util.Map;
139

1410
public abstract class LauncherBinary extends BinaryPipeline {
1511
public final LaunchServer server;
@@ -45,7 +41,7 @@ public PipelineContext build() throws IOException {
4541
return this.context;
4642
}
4743

48-
public abstract UpdatesProvider.UpdateVariant getVariant();
44+
public abstract CoreFeatureAPI.UpdateVariant getVariant();
4945

5046
public void init() {
5147
}

components/launchserver/src/main/java/pro/gravit/launchserver/binary/PipelineContext.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.apache.logging.log4j.LogManager;
44
import org.apache.logging.log4j.Logger;
5+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
56
import pro.gravit.launchserver.LaunchServer;
67
import pro.gravit.launchserver.auth.updates.UpdatesProvider;
78
import pro.gravit.utils.helper.SecurityHelper;
@@ -63,7 +64,7 @@ public<T> T getProperty(String name) {
6364
return (T) properties.get(name);
6465
}
6566

66-
public UpdatesProvider.UpdateUploadInfo makeUploadInfo(UpdatesProvider.UpdateVariant variant) {
67+
public UpdatesProvider.UpdateUploadInfo makeUploadInfo(CoreFeatureAPI.UpdateVariant variant) {
6768
if(getLastest() == null) {
6869
return null;
6970
}

components/launchserver/src/main/java/pro/gravit/launchserver/modules/events/LaunchServerLauncherBinaryInit.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package pro.gravit.launchserver.modules.events;
22

33
import pro.gravit.launcher.base.modules.LauncherModule;
4+
import pro.gravit.launcher.core.api.features.CoreFeatureAPI;
45
import pro.gravit.launchserver.LaunchServer;
5-
import pro.gravit.launchserver.auth.updates.UpdatesProvider;
66
import pro.gravit.launchserver.binary.LauncherBinary;
77

88
import java.util.Map;
99

1010
public class LaunchServerLauncherBinaryInit extends LauncherModule.Event {
1111
public final LaunchServer server;
12-
public final Map<UpdatesProvider.UpdateVariant, LauncherBinary> binary;
12+
public final Map<CoreFeatureAPI.UpdateVariant, LauncherBinary> binary;
1313

14-
public LaunchServerLauncherBinaryInit(LaunchServer server, Map<UpdatesProvider.UpdateVariant, LauncherBinary> binary) {
14+
public LaunchServerLauncherBinaryInit(LaunchServer server, Map<CoreFeatureAPI.UpdateVariant, LauncherBinary> binary) {
1515
this.server = server;
1616
this.binary = binary;
1717
}

0 commit comments

Comments
 (0)