diff --git a/src/main/java/xxAROX/PresenceMan/Application/AppInfo.java b/src/main/java/xxAROX/PresenceMan/Application/AppInfo.java index 8b1cc57..06b4ae6 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/AppInfo.java +++ b/src/main/java/xxAROX/PresenceMan/Application/AppInfo.java @@ -20,7 +20,7 @@ import java.util.StringJoiner; public final class AppInfo { - public final static int[] version = new int[]{ 1,3,1 }; + public final static int[] version = new int[]{ 1,3,1,12 }; public final static String name = "Presence-Man"; public static String icon = "icon.png"; public static long discord_application_id = 1133823892486623344L; diff --git a/src/main/java/xxAROX/PresenceMan/Application/entity/Gateway.java b/src/main/java/xxAROX/PresenceMan/Application/entity/Gateway.java index 5b0b592..5577210 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/entity/Gateway.java +++ b/src/main/java/xxAROX/PresenceMan/Application/entity/Gateway.java @@ -26,8 +26,7 @@ public class Gateway { public static Integer port = 15151; public static Integer usual_port = 15151; - public static boolean broken = false; - public static boolean broken_popup = false; + public static boolean broken = true; public static String getUrl() { return protocol + (AppInfo.development && address.contains("presence-man.com") ? "develop." + address : address) + (port == null ? "" : ":" + port+(AppInfo.development ? 2 : 0)); diff --git a/src/main/java/xxAROX/PresenceMan/Application/entity/infos/XboxUserInfo.java b/src/main/java/xxAROX/PresenceMan/Application/entity/infos/XboxUserInfo.java index af83b85..191a2ce 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/entity/infos/XboxUserInfo.java +++ b/src/main/java/xxAROX/PresenceMan/Application/entity/infos/XboxUserInfo.java @@ -20,7 +20,6 @@ import net.raphimc.minecraftauth.step.AbstractStep; import net.raphimc.minecraftauth.step.bedrock.session.StepFullBedrockSession; import net.raphimc.minecraftauth.util.MicrosoftConstants; -import xxAROX.PresenceMan.Application.App; import xxAROX.PresenceMan.Application.entity.Gateway; import javax.imageio.ImageIO; @@ -67,7 +66,7 @@ public String getSkinURL(){ return Gateway.getUrl() + skin_url; } public String getHeadURL(){ - return Gateway.getUrl() + head_url; + return (Gateway.broken ? "https://presence-man.com" : Gateway.getUrl()) + head_url; } public Image getHeadImage() { @@ -79,9 +78,8 @@ public Image getHeadImage(boolean regenerate) { try { img = ImageIO.read(new URL(getHeadURL())); } catch (Exception e) { - App.getLogger().error("Error while fetching head: ", e); try { - img = ImageIO.read(new URL(head_url = "https://presence-man.com" + default_head_url)); + img = ImageIO.read(new URL("https://presence-man.com" + default_head_url)); } catch (IOException ignored) {} } head = img; @@ -96,9 +94,8 @@ public Image getSkinImage(boolean regenerate) { try { img = ImageIO.read(new URL(getSkinURL())); } catch (Exception e) { - App.getLogger().error("Error while fetching head: ", e); try { - img = ImageIO.read(new URL(skin_url = "https://presence-man.com" + Gateway.getUrl() + default_skin_url)); + img = ImageIO.read(new URL("https://presence-man.com" + Gateway.getUrl() + default_skin_url)); } catch (IOException ignored) {} } skin = img; diff --git a/src/main/java/xxAROX/PresenceMan/Application/sockets/SocketThread.java b/src/main/java/xxAROX/PresenceMan/Application/sockets/SocketThread.java index 7a7ceeb..ddb87e1 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/sockets/SocketThread.java +++ b/src/main/java/xxAROX/PresenceMan/Application/sockets/SocketThread.java @@ -80,7 +80,7 @@ public void heartbeat() { public void heartbeat(Consumer consumer){ if (!connectionState.get().equals(SocketThread.State.CONNECTED)) return; if (session_token.get() == null && heartbeats_need_a_token) return; - if (heartbeat_pending.get() == 10) { + if (heartbeat_pending.get() == 5) { resetConnection(); heartbeat_pending.set(0); return; @@ -128,20 +128,16 @@ public void tick(int currentTick) { if (xboxInfo == null) return; if (connectionState.get().equals(State.DISCONNECTED) && currentTick %(20*5) == 0) { if (tries_left.getAndDecrement() <= 0) { - App.getLogger().error("Connection can't be established, shutting down.."); - shutdown(); + App.getLogger().info(tries_left.get() +1 == default_tries ? "Connecting.." : "Reconnecting.."); + tries_left.set(default_tries); } else { connectionState.set(State.CONNECTING); - App.getLogger().info(tries_left.get() +1 == default_tries ? "Connecting.." : "Reconnecting.."); if (socket.connect()) { connectionState.set(State.CONNECTED); App.getLogger().info(tries_left.get() +1 == default_tries ? "Connected!" : "Reconnected!"); tries_left.set(default_tries); heartbeat(); - } else { - connectionState.set(State.DISCONNECTED); - App.getLogger().warn(tries_left.get() +1 == default_tries ? "Failed to connect to backend!" :"Reconnecting failed!"); - } + } else connectionState.set(State.DISCONNECTED); } } if (currentTick %40 == 0) heartbeat(); @@ -164,31 +160,33 @@ else if (packet instanceof CallbackPacket callbackPacket && callbackPacket.getCa if (cbp != null) sendPacket(cbp); continue; } - System.out.println(packet); + // NOTE: IDK if that works \_('.')_/ packetHandler.forEach(consumer -> consumer.accept(packet)); } } - } while (!connectionState.get().equals(State.SHUTDOWN)); + } while (socket != null); App.getLogger().debug("[SocketThread]: Bye!"); } public void shutdown(){ - if (connectionState.get().equals(State.SHUTDOWN)) return; + if (socket == null) return; if (session_token.get() != null && !session_token.get().equalsIgnoreCase("")) sendPacket(new ByeByePacket()); connectionState.set(State.SHUTDOWN); socket.close(); + socket = null; } public void wakeup(){ - if (!connectionState.get().equals(State.SHUTDOWN)) return; + if (socket != null) return; connectionState.set(State.DISCONNECTED); heartbeats_need_a_token = false; session_token.set(null); + socket = new Socket(this); socket.connect(); } public boolean sendPacket(@NonNull T packet){ - if (connectionState.get().equals(State.SHUTDOWN) || connectionState.get().equals(State.DISCONNECTED)) return false; + if (socket == null || connectionState.get().equals(State.DISCONNECTED)) return false; if (!connectionState.get().equals(State.CONNECTED) && packet instanceof HeartbeatPacket) return false; if (session_token.get() != null) packet.setToken(session_token.get()); if (packet instanceof HeartbeatPacket heartbeatPacket) { diff --git a/src/main/java/xxAROX/PresenceMan/Application/task/FetchGatewayInformationTask.java b/src/main/java/xxAROX/PresenceMan/Application/task/FetchGatewayInformationTask.java index 2ec3bc5..0158fd1 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/task/FetchGatewayInformationTask.java +++ b/src/main/java/xxAROX/PresenceMan/Application/task/FetchGatewayInformationTask.java @@ -42,14 +42,11 @@ public void onRun(int currentTick) { } public static void ping_backend() { - String content = Utils.WebUtils.get(Gateway.getUrl()).getBody(); - var result = content.toLowerCase().contains("jan sohn / xxarox"); - - Gateway.broken = result; + var response = Utils.WebUtils.get(Gateway.getUrl()); + var result = response != null && response.getBody().toLowerCase().contains("jan sohn / xxarox"); if (result) { ReconnectingTask.deactivate(); Gateway.broken = false; - Gateway.broken_popup = false; App.getInstance().initSocket(); } else { Gateway.broken = true; diff --git a/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/GeneralTab.java b/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/GeneralTab.java index 126b143..3c97c71 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/GeneralTab.java +++ b/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/GeneralTab.java @@ -351,12 +351,15 @@ public void update(APIActivity activity) { @Override public void tick(int currentTick) { - String status = switch (App.getInstance().getSocket().getConnectionState().get()) { - case SHUTDOWN -> "ui.tab.home.backend_status.conn.off"; - case DISCONNECTED -> "ui.tab.home.backend_status.conn.nop"; - case CONNECTING -> "ui.tab.home.backend_status.conn.may"; - case CONNECTED -> "ui.tab.home.backend_status.conn.yes"; - }; + String status = "ui.tab.home.backend_status.conn.off"; + if (App.getInstance().getSocket() != null) { + status = switch (App.getInstance().getSocket().getConnectionState().get()) { + case SHUTDOWN -> "ui.tab.home.backend_status.conn.off"; + case DISCONNECTED -> "ui.tab.home.backend_status.conn.nop"; + case CONNECTING -> "ui.tab.home.backend_status.conn.may"; + case CONNECTED -> "ui.tab.home.backend_status.conn.yes"; + }; + } if (backend_status != null) backend_status.setText(Lang.get(status)); if (currentTick %20 == 0) update(null); // TODO: maybe remove this diff --git a/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/PartnersTab.java b/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/PartnersTab.java index 34c0be6..05a44a2 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/PartnersTab.java +++ b/src/main/java/xxAROX/PresenceMan/Application/ui/tabs/PartnersTab.java @@ -21,6 +21,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import xxAROX.PresenceMan.Application.App; +import xxAROX.PresenceMan.Application.entity.Gateway; import xxAROX.PresenceMan.Application.ui.AUITab; import xxAROX.PresenceMan.Application.ui.AppUI; import xxAROX.PresenceMan.Application.ui.popup.PartnerPopup; @@ -100,7 +101,7 @@ public void tick(int currentTick) { private void reloadPartners() { if (partnerItems != null) partnerItems.clear(); else partnerItems = new ArrayList<>(); - var result = Utils.WebUtils.get("https://presence-man.com/api/v1/partners"); + var result = Utils.WebUtils.get(Gateway.getUrl()+"/api/v1/partners"); Utils.GSON.fromJson(result.getBody(), JsonArray.class).asList().stream().map(JsonElement::getAsJsonObject).forEach(obj -> { try {partnerItems.add(new PartnerItem(obj.get("title").getAsString(), obj.get("about_text").getAsString(), obj.get("domain").getAsString(), obj.get("image").isJsonNull() ? null : new ImageIcon(new URL(obj.get("image").getAsString())), obj.get("banner_image").isJsonNull() ? null : new ImageIcon(new URL(obj.get("banner_image").getAsString())), obj.get("enabled").getAsBoolean(), obj.get("url").isJsonNull() ? null : obj.get("url").getAsString()));} catch (MalformedURLException ignore) {} }); diff --git a/src/main/java/xxAROX/PresenceMan/Application/utils/Utils.java b/src/main/java/xxAROX/PresenceMan/Application/utils/Utils.java index a255574..b756e5e 100644 --- a/src/main/java/xxAROX/PresenceMan/Application/utils/Utils.java +++ b/src/main/java/xxAROX/PresenceMan/Application/utils/Utils.java @@ -230,22 +230,24 @@ public static class WebUtils { public static WebRequester.Result get(String url, Map headers) { WebRequester.init(GSON, App.getInstance().getTickExecutor()); try { - return WebRequester.get(url, headers).get(); + var result = WebRequester.get(url, headers).get(); + return result; } catch (ExecutionException | InterruptedException e) { - App.getLogger().error("Error while executing GET request: ", e); + App.getLogger().error("Error while GET: " + e.getMessage()); + return null; } - return null; } public static WebRequester.Result post(String url) {return post(url, new HashMap<>(), new HashMap<>());} public static WebRequester.Result post(String url, Map headers) {return post(url, headers, new HashMap<>());} public static WebRequester.Result post(String url, Map headers, Map body) { WebRequester.init(GSON, App.getInstance().getTickExecutor()); try { - return WebRequester.post(url, headers, body).get(); + var result = WebRequester.post(url, headers, body).get(); + return result; } catch (ExecutionException | InterruptedException e) { - App.getLogger().error("Error while executing POST request: ", e); + App.getLogger().error("Error while POST: " + e.getMessage()); + return null; } - return null; } } diff --git a/src/test/java/test.java b/src/test/java/test.java deleted file mode 100644 index 6fab7e9..0000000 --- a/src/test/java/test.java +++ /dev/null @@ -1,32 +0,0 @@ -import com.google.gson.Gson; -import xxAROX.WebRequester.WebRequester; - -import java.util.HashMap; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -public class test { - private static final ExecutorService executor = Executors.newFixedThreadPool(10); - - public static void main(String[] args) { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", "Java HTTP Client"); - HashMap body = new HashMap<>(); - headers.put("Hello", "World"); - headers.put("Foo", "Bar"); - - WebRequester.init(new Gson(), executor); - - //CompletableFuture future = WebRequester.getAsync("https://presence-man.com/api/v1/partners", headers); - CompletableFuture future = WebRequester.postAsync("https://jsonplaceholder.typicode.com/posts", headers, body); - - try { - WebRequester.Result result = future.get(); - } catch (Exception e) { - e.printStackTrace(); - } finally { - executor.shutdown(); - } - } -}