add web services and update notifications
This commit is contained in:
parent
c3331d899a
commit
38d29a8efd
12 changed files with 200 additions and 34 deletions
|
@ -52,7 +52,6 @@ jobs:
|
|||
BB_PORT: ${{ vars.BB_PORT }}
|
||||
BB_PATH: ${{ vars.BB_PATH }}
|
||||
run: |
|
||||
bash scripts/push_file.sh loader.version
|
||||
bash scripts/push_file.sh Loader/build/proguard/BaseBand-Loader.jar
|
||||
- name: Notify Action Completion
|
||||
if: always()
|
||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -14,3 +14,4 @@ valid_hashes.txt
|
|||
Obf.tar
|
||||
/Server/run/
|
||||
mobf.jar
|
||||
resources/commit
|
|
@ -12,6 +12,7 @@ import de.com.baseband.client.feature.render.HUD;
|
|||
import de.com.baseband.client.registry.Configuration;
|
||||
import de.com.baseband.client.registry.Updater;
|
||||
import de.com.baseband.client.util.interact.Chat;
|
||||
import de.com.baseband.client.util.net.WebServiceClient;
|
||||
import de.com.baseband.prod.LoadHandler;
|
||||
import de.tudbut.tools.Lock;
|
||||
import hint.Mobf;
|
||||
|
@ -74,6 +75,7 @@ public class BaseBand {
|
|||
Lock lock = new Lock();
|
||||
while (enabled) {
|
||||
lock.lock(1000);
|
||||
WebServiceClient.connect();
|
||||
for (Updater updater : Configuration.updaters) {
|
||||
updater.poll();
|
||||
}
|
||||
|
|
|
@ -23,10 +23,13 @@ import java.util.Map;
|
|||
public class DevStub implements IFMLLoadingPlugin {
|
||||
|
||||
public static final String ID = "baseband_testing";
|
||||
Logger LOGGER = LogManager.getLogger("BaseBand [dev]");
|
||||
|
||||
@Mod.EventHandler
|
||||
public void onInit(FMLPostInitializationEvent event) {
|
||||
LoadHandler.data.set("release-branch", false);
|
||||
LoadHandler.data.set("branch", "[dev]");
|
||||
LoadHandler.data.set("username", "root");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -48,15 +51,11 @@ public class DevStub implements IFMLLoadingPlugin {
|
|||
public void injectData(Map<String, Object> dataMap) {
|
||||
MixinBootstrap.init();
|
||||
Mixins.addConfiguration("mixins.baseband.json");
|
||||
DevLogger.LOGGER.info("loaded mixins");
|
||||
LOGGER.info("loaded mixins");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAccessTransformerClass() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public interface DevLogger {
|
||||
Logger LOGGER = LogManager.getLogger("baeban dev stub");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,24 @@
|
|||
package de.com.baseband.client.util.data;
|
||||
|
||||
import de.tudbut.io.StreamReader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class GitHash {
|
||||
|
||||
public static final String GIT_HASH = "[dev]";
|
||||
public static final String GIT_HASH;
|
||||
static {
|
||||
InputStream stream = GitHash.class.getResourceAsStream("commit");
|
||||
if(stream != null) {
|
||||
try {
|
||||
GIT_HASH = new StreamReader(stream).readAllAsString().trim();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
else {
|
||||
GIT_HASH = "[dev]";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,24 +1,84 @@
|
|||
package de.com.baseband.client.util.net;
|
||||
|
||||
import de.com.baseband.client.BaseBand;
|
||||
import de.tudbut.net.ws.Client;
|
||||
import de.tudbut.net.ws.ConnectionHandler;
|
||||
import de.com.baseband.client.util.data.GitHash;
|
||||
import de.com.baseband.prod.LoadHandler;
|
||||
import de.tudbut.io.TypedInputStream;
|
||||
import de.tudbut.io.TypedOutputStream;
|
||||
import de.tudbut.parsing.JSON;
|
||||
import de.tudbut.parsing.TCN;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
||||
public class WebServiceClient {
|
||||
@SuppressWarnings("FieldCanBeLocal") // not finished yet
|
||||
private static Client client;
|
||||
|
||||
private static boolean wasEverConnected = false;
|
||||
private static TypedInputStream inputStream;
|
||||
private static TypedOutputStream outputStream;
|
||||
|
||||
public static void connect() {
|
||||
if(inputStream != null || outputStream != null)
|
||||
return;
|
||||
try {
|
||||
client = new Client("azidoazideazi.de", 30000);
|
||||
//client.addReceiveHook(READER);
|
||||
try(Socket client = new Socket("baseband.com.de", 40000)) {
|
||||
client.setSoTimeout(15000);
|
||||
client.getOutputStream().write(1); // client mode
|
||||
inputStream = new TypedInputStream(client.getInputStream());
|
||||
outputStream = new TypedOutputStream(client.getOutputStream());
|
||||
|
||||
TCN init = new TCN();
|
||||
init.set("username", LoadHandler.data.getString("username"));
|
||||
init.set("type", "init");
|
||||
init.set("branch", LoadHandler.data.getString("branch"));
|
||||
outputStream.writeString(JSON.write(init));
|
||||
|
||||
int fails = 0;
|
||||
while (fails < 3) {
|
||||
try {
|
||||
String string = inputStream.readString();
|
||||
if(string.equals("SHUTDOWN."))
|
||||
BaseBand.shutdown();
|
||||
TCN packet = JSON.read(string);
|
||||
fails = 0;
|
||||
wasEverConnected = true;
|
||||
|
||||
handlePacket(packet);
|
||||
} catch (Exception e) {
|
||||
fails++;
|
||||
TCN keepAlive = new TCN();
|
||||
keepAlive.set("type", "c-keepalive");
|
||||
try {
|
||||
outputStream.writeString(JSON.write(keepAlive));
|
||||
} catch (Exception e1) {
|
||||
inputStream = null;
|
||||
outputStream = null;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
BaseBand.LOGGER.fatal(e);
|
||||
BaseBand.shutdown();
|
||||
if(!wasEverConnected) {
|
||||
BaseBand.LOGGER.fatal(e);
|
||||
BaseBand.shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static ConnectionHandler READER = connection -> connection.send("");
|
||||
public static boolean outdated = false;
|
||||
|
||||
private static void handlePacket(TCN packet) throws IOException {
|
||||
String type = packet.getString("type");
|
||||
if(type.equals("keepalive")) {
|
||||
outputStream.writeString(JSON.write(packet));
|
||||
return;
|
||||
}
|
||||
if(type.equals("info")) {
|
||||
if(!packet.getString("commit").equals(GitHash.GIT_HASH) && !outdated) {
|
||||
outdated = true;
|
||||
BaseBand.notify("§d§lBaseBand has updated. You will receive the update automatically when you next restart your game.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,6 +57,7 @@ public class Loader implements Util {
|
|||
public static void run() {
|
||||
try(Socket client = new Socket("baseband.com.de", 40000)) {
|
||||
client.setSoTimeout(15000);
|
||||
client.getOutputStream().write(0);
|
||||
TypedInputStream inputStream = new TypedInputStream(client.getInputStream());
|
||||
TypedOutputStream outputStream = new TypedOutputStream(client.getOutputStream());
|
||||
|
||||
|
@ -78,8 +79,8 @@ public class Loader implements Util {
|
|||
out.closeEntry();
|
||||
}
|
||||
out.close();
|
||||
LOGGER.info("BaseBand has downloaded an update. Minecraft will exit.");
|
||||
JOptionPane.showMessageDialog(null, "BaseBand has downloaded an update. Please restart Minecraft.");
|
||||
LOGGER.info("BaseBand has downloaded a significant update. Minecraft will exit.");
|
||||
JOptionPane.showMessageDialog(null, "BaseBand has downloaded a significant update. Please restart Minecraft.");
|
||||
exit();
|
||||
}
|
||||
else if(status == Response.OK) {
|
||||
|
|
|
@ -1,6 +1,24 @@
|
|||
package de.com.baseband.launcher.util;
|
||||
|
||||
import de.tudbut.io.StreamReader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class GitHash {
|
||||
|
||||
public static final String GIT_HASH = "[dev]";
|
||||
public static final String GIT_HASH;
|
||||
static {
|
||||
InputStream stream = GitHash.class.getResourceAsStream("commit");
|
||||
if(stream != null) {
|
||||
try {
|
||||
GIT_HASH = new StreamReader(stream).readAllAsString().trim();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
else {
|
||||
GIT_HASH = "[dev]";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
package de.com.baseband.server;
|
||||
|
||||
import de.tudbut.io.TypedInputStream;
|
||||
import de.tudbut.io.TypedOutputStream;
|
||||
import de.tudbut.parsing.JSON;
|
||||
import de.tudbut.parsing.TCN;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
|
||||
public class ClientHandler {
|
||||
|
||||
public TypedInputStream inputStream;
|
||||
public TypedOutputStream outputStream;
|
||||
|
||||
public void handle(Socket socket) throws IOException {
|
||||
socket.setSoTimeout(15000);
|
||||
inputStream = new TypedInputStream(socket.getInputStream());
|
||||
outputStream = new TypedOutputStream(socket.getOutputStream());
|
||||
|
||||
int fails = 0;
|
||||
while (fails < 3) {
|
||||
try {
|
||||
TCN packet = JSON.read(inputStream.readString());
|
||||
fails = 0;
|
||||
|
||||
handlePacket(packet);
|
||||
} catch (Exception e) {
|
||||
fails++;
|
||||
TCN keepAlive = new TCN();
|
||||
keepAlive.set("type", "keepalive");
|
||||
try {
|
||||
outputStream.writeString(JSON.write(keepAlive));
|
||||
} catch (Exception e1) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handlePacket(TCN packet) throws IOException {
|
||||
String type = packet.getString("type");
|
||||
if(type.equals("c-keepalive")) {
|
||||
packet.set("type", "keepalive");
|
||||
outputStream.writeString(JSON.write(packet));
|
||||
return;
|
||||
}
|
||||
if(type.equals("init")) {
|
||||
|
||||
String branchHash = null;
|
||||
String branch = packet.getString("branch");
|
||||
if(branch.equals("main"))
|
||||
branchHash = Main.clientDebugHash;
|
||||
if(branch.equals("release"))
|
||||
branchHash = Main.clientHash;
|
||||
if(branch.equals("[dev]"))
|
||||
branchHash = "[dev]";
|
||||
|
||||
TCN initResponse = new TCN();
|
||||
initResponse.set("type", "info");
|
||||
if(branchHash == null) {
|
||||
outputStream.writeString("SHUTDOWN.");
|
||||
return;
|
||||
}
|
||||
initResponse.set("commit", branchHash);
|
||||
outputStream.writeString(JSON.write(initResponse));
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,6 +31,8 @@ public class LoaderHandler {
|
|||
if(response.o == UserHandler.Response.OK.ordinal()) {
|
||||
TCN data = new TCN();
|
||||
data.set("release-branch", "release".equals(response.t.getString("branch")));
|
||||
data.set("branch", response.t.getString("branch"));
|
||||
data.set("username", userData.getString("username"));
|
||||
outputStream.writeString(key.encryptString(Tools.mapToString(data.toMap())));
|
||||
|
||||
Map<String, byte[]> classes = null;
|
||||
|
|
|
@ -21,6 +21,7 @@ import java.io.FileOutputStream;
|
|||
import java.io.IOException;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.security.KeyPair;
|
||||
import java.util.HashMap;
|
||||
|
@ -35,9 +36,9 @@ public class Main {
|
|||
public static RSAKey rsaKey;
|
||||
|
||||
public static boolean denyAll = false;
|
||||
public static String clientHash, clientDebugHash, loaderHash;
|
||||
public static Map<String, byte[]> classes = new HashMap<>();
|
||||
public static Map<String, byte[]> classesDebug = new HashMap<>();
|
||||
public static String loaderHash;
|
||||
public static Map<String, byte[]> classesLoader = new HashMap<>();
|
||||
|
||||
public static void save() {
|
||||
|
@ -98,7 +99,10 @@ public class Main {
|
|||
indexJar(classes, "Broadway");
|
||||
indexJar(classesDebug, "DSM");
|
||||
indexJar(classesLoader, "Loader");
|
||||
loaderHash = new StreamReader(new FileInputStream("loader.version")).readAllAsString().trim();
|
||||
clientHash = new String(classes.get("commit"), StandardCharsets.ISO_8859_1);
|
||||
loaderHash = new String(classesLoader.getOrDefault("commit", "[dev]".getBytes(StandardCharsets.ISO_8859_1)), StandardCharsets.ISO_8859_1);
|
||||
clientDebugHash = new String(classesDebug.getOrDefault("commit", "[dev]".getBytes(StandardCharsets.ISO_8859_1)), StandardCharsets.ISO_8859_1);
|
||||
|
||||
|
||||
for (String s : classesDebug.keySet().toArray(new String[0])) {
|
||||
if(s.startsWith("org/spongepowered"))
|
||||
|
@ -123,7 +127,11 @@ public class Main {
|
|||
Socket thisClient = client;
|
||||
new Thread(() -> {
|
||||
try {
|
||||
LoaderHandler.handle(thisClient);
|
||||
int type = thisClient.getInputStream().read();
|
||||
if(type == 0)
|
||||
LoaderHandler.handle(thisClient);
|
||||
if(type == 1)
|
||||
new ClientHandler().handle(thisClient);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
|
|
@ -2,15 +2,4 @@
|
|||
|
||||
COMMIT="$(git describe --always)"
|
||||
|
||||
echo "package de.com.baseband.client.util.data;" > Client/src/main/java/de/com/baseband/client/util/data/GitHash.java
|
||||
echo "package de.com.baseband.launcher.util;" > Loader/src/main/java/de/com/baseband/launcher/util/GitHash.java
|
||||
|
||||
(cat | tee -a Client/src/main/java/de/com/baseband/client/util/data/GitHash.java Loader/src/main/java/de/com/baseband/launcher/util/GitHash.java) << EOF
|
||||
|
||||
public class GitHash {
|
||||
|
||||
public static final String GIT_HASH = "$COMMIT";
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "$COMMIT" > loader.version
|
||||
echo -n "$COMMIT" | tee Client/src/main/resources/commit Loader/src/main/resources/commit
|
Loading…
Add table
Reference in a new issue