diff --git a/Client/src/main/java/de/com/baseband/client/BaseBand.java b/Client/src/main/java/de/com/baseband/client/BaseBand.java index 64cc3fd..3e13919 100644 --- a/Client/src/main/java/de/com/baseband/client/BaseBand.java +++ b/Client/src/main/java/de/com/baseband/client/BaseBand.java @@ -13,7 +13,7 @@ import de.com.baseband.client.mixin.MixinProxy; 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.client.util.net.WebServiceClient2; import de.com.baseband.client.util.render.NotificationRender; import de.com.baseband.prod.LoadHandler; import de.tudbut.tools.Lock; @@ -36,6 +36,7 @@ public class BaseBand { public static final EventBus EVENT_BUS = new EventBus(Throwable::printStackTrace); public static final RemoteEventBus REMOTE_EVENT_BUS = new RemoteEventBus(); public static final StaticEventHandler STATIC_EVENT_HANDLER = new StaticEventHandler(); + public static final WebServiceClient2 wsc2 = new WebServiceClient2(); public static boolean enabled = true; public static boolean finishedDisabling = false; public static Minecraft mc; @@ -80,7 +81,6 @@ public class BaseBand { Lock lock = new Lock(); while (enabled) { lock.lock(1000); - WebServiceClient.connect(); for (Updater updater : Configuration.updaters) { updater.poll(); } @@ -96,6 +96,11 @@ public class BaseBand { LOGGER.info("Unloaded."); }, "Async Config Updater").start(); + LOGGER.info("Starting up WSC2..."); + + wsc2.start(); + wsc2.lock.waitHere(); + LOGGER.info("Initialized."); } diff --git a/Client/src/main/java/de/com/baseband/client/util/net/WebServiceClient2.java b/Client/src/main/java/de/com/baseband/client/util/net/WebServiceClient2.java index 0ca3840..4e3ce80 100644 --- a/Client/src/main/java/de/com/baseband/client/util/net/WebServiceClient2.java +++ b/Client/src/main/java/de/com/baseband/client/util/net/WebServiceClient2.java @@ -1,6 +1,75 @@ package de.com.baseband.client.util.net; -public class WebServiceClient2 { +import de.com.baseband.client.BaseBand; +import de.com.baseband.client.util.data.GitHash; +import de.com.baseband.prod.LoadHandler; +import de.tudbut.parsing.JSON; +import de.tudbut.parsing.TCN; +import de.tudbut.tools.Lock; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.MalformedURLException; +import java.net.URL; + +public class WebServiceClient2 extends Thread { // TODO make // -> https://downloads.baseband.com.de + + BufferedReader connection; + public Lock lock = new Lock(); + boolean outdated = false; + + public WebServiceClient2() { + try { + connection = new BufferedReader(new InputStreamReader(new URL("https://downloads.baseband.com.de/listen").openStream())); + lock.lock(); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } catch (IOException e) { + BaseBand.LOGGER.fatal("Cannot connect to WSC2."); + BaseBand.shutdown(); + } + } + + public void run() { + while (true) { + try { + while (true) { + String line = connection.readLine(); + + TCN event = JSON.read(line); + switch (event.getString("event-kind")) { + case "init": + BaseBand.notify("Connected to WSC2."); + lock.unlock(); + break; + case "refresh:1.12.2": + TCN branch = event.getSub("data").getSub(LoadHandler.data.getString("branch")); + if (branch != null) { + if (!branch.getString("commit").equals(GitHash.GIT_HASH) && !outdated) { + outdated = true; + BaseBand.notifyAll("§d§lBaseBand has updated. To update, restart Minecraft.", 40000); + } + } + break; + case "refresh:ednieva": + break; + default: + BaseBand.notify("Incompatible WSC2 event received: " + event.getString("event-kind") + ". Please report this."); + break; + } + } + } catch (Exception e) { + connection = null; + BaseBand.LOGGER.info("WSC2 disconnected."); + lock.lock(10000); + lock.waitHere(); + try { + connection = new BufferedReader(new InputStreamReader(new URL("https://downloads.baseband.com.de/listen").openStream())); + } catch (IOException ex) {} + } + } + } }