From 3735799629a3c70eba7c7cddb90a97cc8654287d Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Sun, 4 Jul 2021 20:34:26 +0200 Subject: [PATCH] might break --- .../java/gearth/extensions/Extension.java | 19 +++++++++++------- .../java/gearth/extensions/ExtensionBase.java | 12 +++++++++++ .../java/gearth/extensions/IExtension.java | 3 +++ .../extensions/InternalExtensionBuilder.java | 3 ++- .../extensions/OnConnectionListener.java | 2 +- .../extensions/extra/tools/ChatConsole.java | 2 +- .../extra/tools/PacketInfoSupport.java | 15 +++----------- .../BlockAndReplacePackets.java | 6 ------ .../PacketInfoExplorer.java | 8 ++++---- .../uilogger/UiLogger.java | 5 ++--- .../uilogger/UiLoggerController.java | 20 +++++++++---------- 11 files changed, 50 insertions(+), 45 deletions(-) diff --git a/G-Earth/src/main/java/gearth/extensions/Extension.java b/G-Earth/src/main/java/gearth/extensions/Extension.java index 6a97383..4878bbd 100644 --- a/G-Earth/src/main/java/gearth/extensions/Extension.java +++ b/G-Earth/src/main/java/gearth/extensions/Extension.java @@ -19,12 +19,12 @@ public abstract class Extension extends ExtensionBase { protected FlagsCheckListener flagRequestCallback = null; private String[] args; - private boolean isCorrupted = false; + private volatile boolean isCorrupted = false; private static final String[] PORT_FLAG = {"--port", "-p"}; private static final String[] FILE_FLAG = {"--filename", "-f"}; private static final String[] COOKIE_FLAG = {"--auth-token", "-c"}; // don't add a cookie or filename when debugging - protected PacketInfoManager packetInfoManager = new PacketInfoManager(new ArrayList<>()); // empty + private volatile boolean delayed_init = false; private OutputStream out = null; @@ -130,13 +130,17 @@ public abstract class Extension extends ExtensionBase { String hotelVersion = packet.readString(); String clientIdentifier = packet.readString(); HClient clientType = HClient.valueOf(packet.readString()); - packetInfoManager = PacketInfoManager.readFromPacket(packet); + setPacketInfoManager(PacketInfoManager.readFromPacket(packet)); Constants.UNITY_PACKETS = clientType == HClient.UNITY; getOnConnectionObservable().fireEvent(l -> l.onConnection( host, connectionPort, hotelVersion, - clientIdentifier, clientType, packetInfoManager) + clientIdentifier, clientType) ); + if (delayed_init) { + initExtension(); + delayed_init = false; + } onStartConnection(); } else if (packet.headerId() == NetworkExtensionInfo.OUTGOING_MESSAGES_IDS.CONNECTIONEND) { @@ -155,8 +159,10 @@ public abstract class Extension extends ExtensionBase { flagRequestCallback = null; } else if (packet.headerId() == NetworkExtensionInfo.OUTGOING_MESSAGES_IDS.INIT) { -// boolean isConnected = packet.readBoolean(); - don't read since not relevant here - initExtension(); + delayed_init = packet.readBoolean(); + if (!delayed_init) { + initExtension(); + } writeToConsole("green","Extension \"" + getInfoAnnotations().Title() + "\" successfully initialized", false); } else if (packet.headerId() == NetworkExtensionInfo.OUTGOING_MESSAGES_IDS.ONDOUBLECLICK) { @@ -300,5 +306,4 @@ public abstract class Extension extends ExtensionBase { protected boolean canDelete() { return true; } - } diff --git a/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java b/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java index 060b835..92bc66c 100644 --- a/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java +++ b/G-Earth/src/main/java/gearth/extensions/ExtensionBase.java @@ -3,6 +3,7 @@ package gearth.extensions; import gearth.misc.listenerpattern.Observable; import gearth.protocol.HMessage; import gearth.protocol.HPacket; +import gearth.services.packet_info.PacketInfoManager; import java.util.ArrayList; import java.util.HashMap; @@ -21,6 +22,8 @@ public abstract class ExtensionBase extends IExtension { protected final Map> incomingMessageListeners = new HashMap<>(); protected final Map> outgoingMessageListeners = new HashMap<>(); + protected PacketInfoManager packetInfoManager = new PacketInfoManager(new ArrayList<>()); // empty + /** * Register a listener on a specific packet Type * @param direction ToClient or ToServer @@ -127,4 +130,13 @@ public abstract class ExtensionBase extends IExtension { Observable getOnConnectionObservable() { return onConnectionObservable; } + + protected void setPacketInfoManager(PacketInfoManager packetInfoManager) { + this.packetInfoManager = packetInfoManager; + } + + @Override + public PacketInfoManager getPacketInfoManager() { + return packetInfoManager; + } } diff --git a/G-Earth/src/main/java/gearth/extensions/IExtension.java b/G-Earth/src/main/java/gearth/extensions/IExtension.java index 3b8ae89..e5f47c0 100644 --- a/G-Earth/src/main/java/gearth/extensions/IExtension.java +++ b/G-Earth/src/main/java/gearth/extensions/IExtension.java @@ -2,6 +2,7 @@ package gearth.extensions; import gearth.protocol.HMessage; import gearth.protocol.HPacket; +import gearth.services.packet_info.PacketInfoManager; public abstract class IExtension { @@ -21,4 +22,6 @@ public abstract class IExtension { abstract ExtensionInfo getInfoAnnotations(); abstract boolean canLeave(); abstract boolean canDelete(); + + public abstract PacketInfoManager getPacketInfoManager(); } diff --git a/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java b/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java index b1440d9..07cb9e2 100644 --- a/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java +++ b/G-Earth/src/main/java/gearth/extensions/InternalExtensionBuilder.java @@ -105,9 +105,10 @@ public class InternalExtensionBuilder extends GEarthExtension { @Override public void connectionStart(String host, int port, String hotelVersion, String clientIdentifier, HClient clientType, PacketInfoManager packetInfoManager) { + extension.setPacketInfoManager(packetInfoManager); extension.getOnConnectionObservable().fireEvent(l -> l.onConnection( host, port, hotelVersion, - clientIdentifier, clientType, packetInfoManager) + clientIdentifier, clientType) ); extension.onStartConnection(); } diff --git a/G-Earth/src/main/java/gearth/extensions/OnConnectionListener.java b/G-Earth/src/main/java/gearth/extensions/OnConnectionListener.java index 07b7f58..c5c3c0a 100644 --- a/G-Earth/src/main/java/gearth/extensions/OnConnectionListener.java +++ b/G-Earth/src/main/java/gearth/extensions/OnConnectionListener.java @@ -4,5 +4,5 @@ import gearth.services.packet_info.PacketInfoManager; import gearth.protocol.connection.HClient; public interface OnConnectionListener { - void onConnection(String host, int port, String hotelversion, String clientIdentifier, HClient clientType, PacketInfoManager packetInfoManager); + void onConnection(String host, int port, String hotelversion, String clientIdentifier, HClient clientType); } diff --git a/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java b/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java index cde0c8c..d40ed20 100644 --- a/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java +++ b/G-Earth/src/main/java/gearth/extensions/extra/tools/ChatConsole.java @@ -41,7 +41,7 @@ public class ChatConsole { this.infoMessage = infoMessage; final boolean[] doOncePerConnection = {false}; - extension.onConnect((host, port, hotelversion, clientIdentifier, clientType, packetInfoManager) -> + extension.onConnect((host, port, hotelversion, clientIdentifier, clientType) -> doOncePerConnection[0] = true ); diff --git a/G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java b/G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java index 27d1c62..9b58cd3 100644 --- a/G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java +++ b/G-Earth/src/main/java/gearth/extensions/extra/tools/PacketInfoSupport.java @@ -17,7 +17,6 @@ public class PacketInfoSupport { private final Object lock = new Object(); - private PacketInfoManager packetInfoManager = new PacketInfoManager(new ArrayList<>()); //empty private Map> incomingMessageListeners = new HashMap<>(); private Map> outgoingMessageListeners = new HashMap<>(); @@ -26,10 +25,6 @@ public class PacketInfoSupport { public PacketInfoSupport(IExtension extension) { this.extension = extension; - extension.onConnect((host, port, hotelversion, clientIdentifier, clientType, packetInfoManager) -> - this.packetInfoManager = packetInfoManager - ); - extension.intercept(HMessage.Direction.TOSERVER, message -> onReceivePacket(HMessage.Direction.TOSERVER, message)); extension.intercept(HMessage.Direction.TOCLIENT, message -> onReceivePacket(HMessage.Direction.TOCLIENT, message)); } @@ -41,7 +36,7 @@ public class PacketInfoSupport { ? outgoingMessageListeners : incomingMessageListeners); - List packetInfos = packetInfoManager.getAllPacketInfoFromHeaderId(direction, message.getPacket().headerId()); + List packetInfos = extension.getPacketInfoManager().getAllPacketInfoFromHeaderId(direction, message.getPacket().headerId()); for (PacketInfo packetInfo : packetInfos) { List listeners_hash = messageListeners.get(packetInfo.getHash()); @@ -72,12 +67,12 @@ public class PacketInfoSupport { private boolean send(HMessage.Direction direction, String hashOrName, Object... objects) { int headerId; - PacketInfo fromname = packetInfoManager.getPacketInfoFromName(direction, hashOrName); + PacketInfo fromname = extension.getPacketInfoManager().getPacketInfoFromName(direction, hashOrName); if (fromname != null) { headerId = fromname.getHeaderId(); } else { - PacketInfo fromHash = packetInfoManager.getPacketInfoFromHash(direction, hashOrName); + PacketInfo fromHash = extension.getPacketInfoManager().getPacketInfoFromHash(direction, hashOrName); if (fromHash == null) return false; headerId = fromHash.getHeaderId(); } @@ -109,8 +104,4 @@ public class PacketInfoSupport { public boolean sendToServer(String hashOrName, Object... objects) { return send(HMessage.Direction.TOSERVER, hashOrName, objects); } - - public PacketInfoManager getPacketInfoManager() { - return packetInfoManager; - } } diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java index 6838aad..9321bb0 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/blockreplacepackets/BlockAndReplacePackets.java @@ -51,8 +51,6 @@ public class BlockAndReplacePackets extends ExtensionForm { List rules = new ArrayList<>(); - private PacketInfoManager packetInfoManager = PacketInfoManager.EMPTY; - // public static void main(String[] args) { // runExtensionForm(args, BlockAndReplacePackets.class); // } @@ -210,10 +208,6 @@ public class BlockAndReplacePackets extends ExtensionForm { intercept(HMessage.Direction.TOSERVER, messageListener); intercept(HMessage.Direction.TOCLIENT, messageListener); - - onConnect((host, port, hotelversion, clientIdentifier, clientType, packetInfoManager) -> { - this.packetInfoManager = packetInfoManager; - }); } @Override diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/packetinfoexplorer/PacketInfoExplorer.java b/G-Earth/src/main/java/gearth/services/internal_extensions/packetinfoexplorer/PacketInfoExplorer.java index 2795abe..337fabf 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/packetinfoexplorer/PacketInfoExplorer.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/packetinfoexplorer/PacketInfoExplorer.java @@ -110,17 +110,17 @@ public class PacketInfoExplorer extends ExtensionForm { @Override protected void initExtension() { - onConnect((host, port, hotelversion, clientIdentifier, clientType, packetInfoManager) -> { - setPacketInfoManager(packetInfoManager); + onConnect((host, port, hotelversion, clientIdentifier, clientType) -> { + init(packetInfoManager); }); } @Override protected void onEndConnection() { - setPacketInfoManager(PacketInfoManager.EMPTY); + init(PacketInfoManager.EMPTY); } - private void setPacketInfoManager(PacketInfoManager packetInfoManager) { + private void init(PacketInfoManager packetInfoManager) { packetInfoList = packetInfoManager.getPacketInfoList(); packetInfoList.sort(Comparator.comparingInt(PacketInfo::getHeaderId)); diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLogger.java b/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLogger.java index fa594f7..699adcf 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLogger.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLogger.java @@ -46,8 +46,8 @@ public class UiLogger extends ExtensionForm implements PacketLogger { @Override protected void initExtension() { - onConnect((host, port, hotelversion, clientIdentifier, clientType, packetInfoManager) -> { - controller.setPacketInfoManager(packetInfoManager); + controller.init(this); + onConnect((host, port, hotelversion, clientIdentifier, clientType) -> { controller.onConnect(); }); } @@ -55,7 +55,6 @@ public class UiLogger extends ExtensionForm implements PacketLogger { @Override protected void onEndConnection() { controller.onDisconnect(); - controller.setPacketInfoManager(PacketInfoManager.EMPTY); } @Override diff --git a/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerController.java b/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerController.java index 683ee54..73dba9f 100644 --- a/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerController.java +++ b/G-Earth/src/main/java/gearth/services/internal_extensions/uilogger/UiLoggerController.java @@ -71,7 +71,6 @@ public class UiLoggerController implements Initializable { private StyleClassedTextArea area; private Stage stage; - private PacketInfoManager packetInfoManager = null; private int filteredAmount = 0; @@ -79,6 +78,7 @@ public class UiLoggerController implements Initializable { private final List appendLater = new ArrayList<>(); private List allMenuItems = new ArrayList<>(); + private UiLogger uiLogger; private boolean isSelected(MenuItem item) { if (item instanceof CheckMenuItem) { @@ -216,10 +216,10 @@ public class UiLoggerController implements Initializable { elements.add(new Element(String.format("(timestamp: %d)\n", System.currentTimeMillis()), "timestamp")); } - boolean packetInfoAvailable = packetInfoManager.getPacketInfoList().size() > 0; + boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0; if ((chkMessageName.isSelected() || chkMessageHash.isSelected()) && packetInfoAvailable) { - List messages = packetInfoManager.getAllPacketInfoFromHeaderId( + List messages = uiLogger.getPacketInfoManager().getAllPacketInfoFromHeaderId( (isIncoming ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER), packet.headerId() ); @@ -277,7 +277,7 @@ public class UiLoggerController implements Initializable { if (packet.length() <= 2000) { try { - String expr = packet.toExpression(isIncoming ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER, packetInfoManager, chkUseNewStructures.isSelected()); + String expr = packet.toExpression(isIncoming ? HMessage.Direction.TOCLIENT : HMessage.Direction.TOSERVER, uiLogger.getPacketInfoManager(), chkUseNewStructures.isSelected()); String cleaned = cleanTextContent(expr); if (cleaned.equals(expr)) { if (!expr.equals("") && chkDisplayStructure.isSelected()) @@ -338,16 +338,11 @@ public class UiLoggerController implements Initializable { lblAutoScrolll.setText("Autoscroll: " + (chkAutoscroll.isSelected() ? "True" : "False")); lblFiltered.setText("Filtered: " + filteredAmount); - boolean packetInfoAvailable = packetInfoManager.getPacketInfoList().size() > 0; + boolean packetInfoAvailable = uiLogger.getPacketInfoManager().getPacketInfoList().size() > 0; lblPacketInfo.setText("Packet info: " + (packetInfoAvailable ? "True" : "False")); }); } - public void setPacketInfoManager(PacketInfoManager packetInfoManager) { - this.packetInfoManager = packetInfoManager; - Platform.runLater(this::updateLoggerInfo); - } - public void toggleAlwaysOnTop(ActionEvent actionEvent) { stage.setAlwaysOnTop(chkAlwaysOnTop.isSelected()); } @@ -376,6 +371,7 @@ public class UiLoggerController implements Initializable { stage.show(); } }); + Platform.runLater(this::updateLoggerInfo); } public void exportAll(ActionEvent actionEvent) { @@ -406,4 +402,8 @@ public class UiLoggerController implements Initializable { } } + + public void init(UiLogger uiLogger) { + this.uiLogger = uiLogger; + } }