Caching server providers now

This commit is contained in:
Parnassian
2014-02-26 18:47:12 +01:00
parent d4b116fae5
commit d4f167a267
5 changed files with 126 additions and 24 deletions
@@ -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;
}
@@ -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
@@ -35,6 +35,7 @@ import org.parabot.core.ui.components.VerboseLoader;
* @author Everel
* @author Matt
*/
@SuppressWarnings("unused")
public class ClassPath {
public final HashMap<String, ClassNode> classes;
public final Map<String, URL> 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);
}
/**
@@ -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"));
}
}
@@ -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(