v2.01 update

This commit is contained in:
Clisprail
2013-09-04 14:45:23 +02:00
parent 36f7e0407e
commit edb17e188b
89 changed files with 2866 additions and 847 deletions
@@ -6,6 +6,11 @@ import org.parabot.environment.scripts.framework.AbstractFramework;
import org.parabot.environment.scripts.framework.LoopTask;
import org.parabot.environment.scripts.framework.Strategy;
/**
*
* @author Everel
*
*/
public class Frameworks {
public static Looper getLooper(LoopTask loopTask) {
@@ -0,0 +1,20 @@
package org.parabot.environment.scripts;
/**
*
* @author Everel
*
*/
public class LocalScriptExecuter extends ScriptExecuter {
private Script script = null;
public LocalScriptExecuter(final Script script) {
this.script = script;
}
@Override
public void run(ThreadGroup tg) {
super.finalize(tg, this.script);
}
}
@@ -0,0 +1,94 @@
package org.parabot.environment.scripts;
import java.lang.reflect.Constructor;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.JOptionPane;
import org.parabot.core.Configuration;
import org.parabot.core.classpath.ClassPath;
import org.parabot.core.forum.AccountManager;
import org.parabot.core.forum.AccountManagerAccess;
import org.parabot.core.ui.utils.UILog;
import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.scripts.loader.JavaScriptLoader;
/**
*
* @author Everel
*
*/
public class SDNScriptExecuter extends ScriptExecuter {
private int id = -1;
private static AccountManager manager = null;
public static final AccountManagerAccess MANAGER_FETCHER = new AccountManagerAccess() {
@Override
public final void setManager(AccountManager manager) {
SDNScriptExecuter.manager = manager;
}
};
public SDNScriptExecuter(final int id) {
this.id = id;
}
@Override
public void run(ThreadGroup tg) {
try {
final URLConnection urlConnection = WebUtil.getConnection(new URL(String.format(Configuration.GET_SDN_SCRIPT, manager.getAccount().getUsername(), manager.getAccount().getPassword(), this.id)));
final String contentType = urlConnection.getHeaderField("Content-type");
if(contentType.equals("text/html")) {
// failed to fetch script
UILog.log("Error", new StringBuilder("Failed to load SDN script, error: [Page returned: ").append(WebUtil.getContents(urlConnection)).append("]").toString(), JOptionPane.ERROR_MESSAGE);
} else if(contentType.equals("application/jar")) {
//// JAR LOADING PART ////////
// succesfull request, jar returned
final ClassPath classPath = new ClassPath();
classPath.addJar(urlConnection);
final JavaScriptLoader loader = new JavaScriptLoader(classPath);
final String[] scriptClasses = loader.getScriptClassNames();
if(scriptClasses == null || scriptClasses.length == 0) {
UILog.log("Error", "Failed to load SDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE);
return;
} else if(scriptClasses.length > 1) {
UILog.log("Error", "Failed to load SDN script, error: [Multiple scripts found in jar file.]");
return;
}
final String className = scriptClasses[0];
try {
final Class<?> scriptClass = loader.loadClass(className);
final Constructor<?> con = scriptClass.getConstructor();
final Script script = (Script) con.newInstance();
super.finalize(tg, script);
} catch (NoClassDefFoundError ignored) {
UILog.log("Error", "Failed to load SDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE);
} catch(ClassNotFoundException ignored) {
UILog.log("Error", "Failed to load SDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE);
} catch (Throwable t) {
t.printStackTrace();
UILog.log("Error", "Failed to load SDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
}
//// END JAR LOADING ////
} else {
UILog.log("Error", new StringBuilder("Failed to load SDN script, error: [Unknown content type: ").append(contentType).append("]").toString(), JOptionPane.ERROR_MESSAGE);
}
} catch (Throwable t) {
t.printStackTrace();
UILog.log("Error", "Failed to load SDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
}
}
}
@@ -3,7 +3,9 @@ package org.parabot.environment.scripts;
import java.util.Collection;
import org.parabot.core.Context;
import org.parabot.core.Core;
import org.parabot.core.ui.components.BotToolbar;
import org.parabot.core.ui.components.LogArea;
import org.parabot.environment.api.utils.Time;
import org.parabot.environment.scripts.framework.AbstractFramework;
import org.parabot.environment.scripts.framework.LoopTask;
@@ -12,7 +14,7 @@ import org.parabot.environment.scripts.framework.Strategy;
/**
*
* @author Clisprail
* @author Everel
*
*/
public class Script implements Runnable {
@@ -29,7 +31,7 @@ public class Script implements Runnable {
public static final int STATE_PAUSE = 1;
public static final int STATE_STOPPED = 2;
public boolean onExecute() {
public boolean onExecute() {
return true;
}
@@ -58,24 +60,35 @@ public class Script implements Runnable {
@Override
public final void run() {
Core.verbose("Initializing script...");
Context.resolve().getServerProvider().initScript(this);
Core.verbose("Done.");
if(!onExecute()) {
Core.verbose("Script#onExecute returned false, unloading and stopping script...");
Context.resolve().getServerProvider().unloadScript(this);
this.state = STATE_STOPPED;
Core.verbose("Done.");
return;
}
Core.verbose("Detecting script framework...");
Context.resolve().setRunningScript(this);
BotToolbar.getInstance().toggleRun();
if(this instanceof LoopTask) {
Core.verbose("Script framework detected: LoopTask");
frameWorkType = TYPE_LOOP;
frameWork = Frameworks.getLooper((LoopTask) this);
} else if(strategies != null && !strategies.isEmpty()) {
Core.verbose("Script framework detected: Strategies");
frameWorkType = TYPE_STRATEGY;
frameWork = Frameworks.getStrategyWorker(strategies);
} else {
Core.verbose("Unknown script framework: Other");
frameWorkType = TYPE_OTHER;
}
Core.verbose("Running script...");
LogArea.log("Script started.");
try {
while(this.state != STATE_STOPPED) {
if(this.state == STATE_PAUSE) {
@@ -89,12 +102,14 @@ public class Script implements Runnable {
} catch (Throwable t) {
t.printStackTrace();
}
Core.verbose("Script stopped/finished, unloading and stopping...");
onFinish();
LogArea.log("Script stopped.");
Context.resolve().getServerProvider().unloadScript(this);
this.state = STATE_STOPPED;
Context.resolve().setRunningScript(null);
BotToolbar.getInstance().toggleRun();
Core.verbose("Done.");
}
/**
@@ -0,0 +1,12 @@
package org.parabot.environment.scripts;
public abstract class ScriptExecuter {
public abstract void run(final ThreadGroup tg);
public final void finalize(final ThreadGroup tg, final Script script) {
new Thread(tg, script).start();
}
}
@@ -5,7 +5,7 @@ import java.lang.annotation.RetentionPolicy;
/**
* A script manifest
* @author Clisprail
* @author Everel
*
*/
@Retention(RetentionPolicy.RUNTIME)
@@ -22,5 +22,9 @@ public @interface ScriptManifest {
String description();
String[] servers();
boolean vip() default false;
boolean premium() default false;
}
@@ -0,0 +1,9 @@
package org.parabot.environment.scripts.framework;
import org.parabot.environment.scripts.Script;
public abstract class PythonScript extends Script {
public abstract int loop();
}
@@ -12,14 +12,14 @@ import org.parabot.environment.scripts.Script;
*
* An environment to load a server
*
* @author Clisprail
* @author Everel
*
*
*/
public class ScriptLoader extends ASMClassLoader {
public class JavaScriptLoader extends ASMClassLoader {
private ClassPath classPath = null;
public ScriptLoader(ClassPath classPath) {
public JavaScriptLoader(ClassPath classPath) {
super(classPath);
this.classPath = classPath;
}