From d4f167a267a177f4d1a5444c6b92b6fc1cb4e757 Mon Sep 17 00:00:00 2001 From: Parnassian Date: Wed, 26 Feb 2014 18:47:12 +0100 Subject: [PATCH] Caching server providers now --- .../src/org/parabot/core/Configuration.java | 2 +- parabotv2/src/org/parabot/core/Context.java | 21 ++++++ .../org/parabot/core/classpath/ClassPath.java | 7 +- .../parabot/core/desc/ServerProviderInfo.java | 69 +++++++++++++++++++ .../servers/PublicServerExecuter.java | 51 ++++++++------ 5 files changed, 126 insertions(+), 24 deletions(-) create mode 100644 parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java diff --git a/parabotv2/src/org/parabot/core/Configuration.java b/parabotv2/src/org/parabot/core/Configuration.java index 17530a1..6f605d9 100644 --- a/parabotv2/src/org/parabot/core/Configuration.java +++ b/parabotv2/src/org/parabot/core/Configuration.java @@ -14,6 +14,6 @@ public class Configuration { public static final String GET_SERVER_PROVIDER_INFO = "http://sdn.parabot.org/providers/getInformation.php?id="; public static final String GET_BOT_VERSION = "http://bot.parabot.org/version.txt"; - public static final double BOT_VERSION = 2.05; // BETA + public static final double BOT_VERSION = 2.06; } diff --git a/parabotv2/src/org/parabot/core/Context.java b/parabotv2/src/org/parabot/core/Context.java index edfa0b2..cb0a7ea 100644 --- a/parabotv2/src/org/parabot/core/Context.java +++ b/parabotv2/src/org/parabot/core/Context.java @@ -2,6 +2,7 @@ package org.parabot.core; import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.classpath.ClassPath; +import org.parabot.core.desc.ServerProviderInfo; import org.parabot.core.paint.PaintDebugger; import org.parabot.core.parsers.hooks.HookParser; import org.parabot.core.ui.BotDialog; @@ -42,6 +43,7 @@ public class Context { private PaintDebugger paintDebugger; private Mouse mouse; private Keyboard keyboard; + private ServerProviderInfo providerInfo; private Context(final ServerProvider serverProvider) { threadGroups.put(Thread.currentThread().getThreadGroup(), this); @@ -192,6 +194,25 @@ public class Context { public ServerProvider getServerProvider() { return serverProvider; } + + /** + * + * Sets provider info of this context + * + * @param providerInfo + */ + public void setProviderInfo(ServerProviderInfo providerInfo) { + this.providerInfo = providerInfo; + } + + /** + * Gets ServerProvider info + * Can be null if this is not a public server provider + * @return info about this provider + */ + public ServerProviderInfo getServerProviderInfo() { + return this.providerInfo; + } /** * Gets class loader of server from this context diff --git a/parabotv2/src/org/parabot/core/classpath/ClassPath.java b/parabotv2/src/org/parabot/core/classpath/ClassPath.java index ef73eb1..9bc3eb3 100644 --- a/parabotv2/src/org/parabot/core/classpath/ClassPath.java +++ b/parabotv2/src/org/parabot/core/classpath/ClassPath.java @@ -35,6 +35,7 @@ import org.parabot.core.ui.components.VerboseLoader; * @author Everel * @author Matt */ +@SuppressWarnings("unused") public class ClassPath { public final HashMap classes; public final Map resources; @@ -194,10 +195,10 @@ public class ClassPath { ClassReader cr = new ClassReader(in); ClassNode cn = new ClassNode(); cr.accept(cn, 0); - RemappingClassAdapter rca = new RemappingClassAdapter(cn,classRemapper); + /*RemappingClassAdapter rca = new RemappingClassAdapter(cn,classRemapper); ClassNode remapped = new ClassNode(); - cn.accept(rca); - classes.put(cn.name, remapped); + cn.accept(rca);*/ + classes.put(cn.name, cn); } /** diff --git a/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java b/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java new file mode 100644 index 0000000..f821112 --- /dev/null +++ b/parabotv2/src/org/parabot/core/desc/ServerProviderInfo.java @@ -0,0 +1,69 @@ +package org.parabot.core.desc; + +import java.io.BufferedReader; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Properties; + +import org.parabot.environment.api.utils.WebUtil; + +/** + * + * @author Everel + * + */ +public class ServerProviderInfo { + private Properties properties; + + public ServerProviderInfo(URL providerInfo) { + this.properties = new Properties(); + try { + String line; + BufferedReader br = WebUtil.getReader(providerInfo); + while ((line = br.readLine()) != null) { + if(line.contains(": ")) { + properties.put(line.substring(0, line.indexOf(": ")), line.substring(line.indexOf(": ") + 2, line.length())); + } + } + br.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public URL getClient() { + try { + return new URL(properties.getProperty("client")); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } + + public URL getHookFile() { + try { + return new URL(properties.getProperty("hooks")); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + return null; + } + + public String getClientClass() { + return properties.getProperty("clientClass"); + } + + public String getServerName() { + return properties.getProperty("serverName"); + } + + public long getCRC32() { + return Long.parseLong(properties.getProperty("crc32")); + } + + public int getBankTabs() { + return Integer.parseInt(properties.getProperty("bankTabs")); + } + + +} diff --git a/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java b/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java index acab193..4271329 100644 --- a/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java +++ b/parabotv2/src/org/parabot/environment/servers/PublicServerExecuter.java @@ -1,16 +1,19 @@ package org.parabot.environment.servers; import org.parabot.core.Configuration; +import org.parabot.core.Context; import org.parabot.core.Core; import org.parabot.core.Directories; import org.parabot.core.build.BuildPath; import org.parabot.core.classpath.ClassPath; +import org.parabot.core.desc.ServerProviderInfo; import org.parabot.core.ui.components.VerboseLoader; import org.parabot.core.ui.utils.UILog; import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.servers.loader.ServerLoader; import javax.swing.*; + import java.io.File; import java.lang.reflect.Constructor; import java.net.URL; @@ -34,31 +37,38 @@ public class PublicServerExecuter extends ServerExecuter { @Override public void run() { try { + try { + Integer.parseInt(this.serverID); + } catch (NumberFormatException e) { + UILog.log( + "Error", + "Failed to parse the server ID for the server provider, error: [Server ID is not an integer.]", + JOptionPane.ERROR_MESSAGE); + return; + } + + ServerProviderInfo serverProviderInfo = new ServerProviderInfo(new URL(Configuration.GET_SERVER_PROVIDER_INFO + + this.serverID)); + final File destination = new File(Directories.getCachePath(), - this.serverID); - final String jarUrl = Configuration.GET_SERVER_PROVIDER + this.serverID; - final String providerInfo = Configuration.GET_SERVER_PROVIDER_INFO + this.serverID; - - try{ - Integer.parseInt(this.serverID); - }catch(NumberFormatException e){ - UILog.log( - "Error", - "Failed to parse the server ID for the server provider, error: [Server ID is not an integer.]", - JOptionPane.ERROR_MESSAGE); - } + serverProviderInfo.getCRC32() + ".jar"); + + + final String jarUrl = Configuration.GET_SERVER_PROVIDER + + this.serverID; Core.verbose("Downloading: " + jarUrl + " ..."); - WebUtil.downloadFile(new URL(jarUrl), destination, - VerboseLoader.get()); + + if(destination.exists()) { + Core.verbose("Found cached server provider [CRC32: " + serverProviderInfo.getCRC32() + "]"); + } else { + WebUtil.downloadFile(new URL(jarUrl), destination, + VerboseLoader.get()); + Core.verbose("Server provider downloaded..."); + } + - WebUtil.downloadFile(new URL(providerInfo), - new File(System.getProperty("user.home") + "/serverProvider.pb"), - VerboseLoader.get()); - - Core.verbose("Server provider downloaded..."); - final ClassPath classPath = new ClassPath(); classPath.addJar(destination); @@ -86,6 +96,7 @@ public class PublicServerExecuter extends ServerExecuter { final Constructor con = providerClass.getConstructor(); final ServerProvider serverProvider = (ServerProvider) con .newInstance(); + Context.getInstance().setProviderInfo(serverProviderInfo); super.finalize(serverProvider, this.serverName); } catch (NoClassDefFoundError ignored) { UILog.log(