Added Uliratha

This commit is contained in:
JKetelaar
2015-04-30 00:54:07 +02:00
parent 8341173f78
commit ee6f13934e
17 changed files with 580 additions and 248 deletions
@@ -6,7 +6,8 @@ package org.parabot.core;
* @author Everel * @author Everel
*/ */
public class Configuration { public class Configuration {
public static final String LOGIN_SERVER = "https://www.parabot.org/community/api/login.php?username=%s&password=%s"; // public static final String LOGIN_SERVER = "https://www.parabot.org/community/api/login.php?username=%s&password=%s";
public static final String LOGIN_SERVER = "http://bdn.parabot.org/api/v2/users/login";
public static final String GET_SCRIPTS = "http://bdn.parabot.org/api/get.php?action=scripts_scripts&server="; public static final String GET_SCRIPTS = "http://bdn.parabot.org/api/get.php?action=scripts_scripts&server=";
public static final String GET_SCRIPT = "http://bdn.parabot.org/api/get.php?action=scripts_script&id="; public static final String GET_SCRIPT = "http://bdn.parabot.org/api/get.php?action=scripts_script&id=";
public static final String GET_SERVER_PROVIDERS = "http://bdn.parabot.org/api/get.php?action=server_providers"; public static final String GET_SERVER_PROVIDERS = "http://bdn.parabot.org/api/get.php?action=server_providers";
@@ -1,5 +1,6 @@
package org.parabot.core; package org.parabot.core;
import org.json.simple.parser.JSONParser;
import org.parabot.core.asm.ASMClassLoader; import org.parabot.core.asm.ASMClassLoader;
import org.parabot.core.classpath.ClassPath; import org.parabot.core.classpath.ClassPath;
import org.parabot.core.desc.ServerProviderInfo; import org.parabot.core.desc.ServerProviderInfo;
@@ -13,6 +14,7 @@ import org.parabot.environment.input.Keyboard;
import org.parabot.environment.input.Mouse; import org.parabot.environment.input.Mouse;
import org.parabot.environment.scripts.Script; import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.randoms.RandomHandler; import org.parabot.environment.scripts.randoms.RandomHandler;
import org.parabot.environment.scripts.uliratha.UlirathaClient;
import org.parabot.environment.servers.ServerProvider; import org.parabot.environment.servers.ServerProvider;
import java.applet.Applet; import java.applet.Applet;
@@ -47,6 +49,8 @@ public class Context {
private Mouse mouse; private Mouse mouse;
private Keyboard keyboard; private Keyboard keyboard;
private ServerProviderInfo providerInfo; private ServerProviderInfo providerInfo;
private UlirathaClient ulirathaClient;
private JSONParser jsonParser;
private Context(final ServerProvider serverProvider) { private Context(final ServerProvider serverProvider) {
threadGroups.put(Thread.currentThread().getThreadGroup(), this); threadGroups.put(Thread.currentThread().getThreadGroup(), this);
@@ -58,6 +62,8 @@ public class Context {
this.classLoader = new ASMClassLoader(classPath); this.classLoader = new ASMClassLoader(classPath);
this.randomHandler = new RandomHandler(); this.randomHandler = new RandomHandler();
this.jsonParser = new JSONParser();
} }
public static Context getInstance(ServerProvider serverProvider) { public static Context getInstance(ServerProvider serverProvider) {
@@ -325,7 +331,19 @@ public class Context {
return username; return username;
} }
public UlirathaClient getUlirathaClient() {
return ulirathaClient;
}
public void setUlirathaClient(UlirathaClient ulirathaClient) {
this.ulirathaClient = ulirathaClient;
}
public static void setUsername(String username) { public static void setUsername(String username) {
Context.username = username; Context.username = username;
} }
public JSONParser getJsonParser() {
return jsonParser;
}
} }
+1 -2
View File
@@ -9,12 +9,11 @@ import java.nio.file.Paths;
import java.security.DigestInputStream; import java.security.DigestInputStream;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
/** /**
* The core of parabot * The core of parabot
* *
* @author Everel * @author Everel, JKetelaar
*/ */
public class Core { public class Core {
public static boolean mDebug; public static boolean mDebug;
@@ -15,6 +15,7 @@ import java.net.URLEncoder;
public class Account { public class Account {
private String username; private String username;
private String password; private String password;
private String api;
/** /**
* *
@@ -26,6 +27,12 @@ public class Account {
this.password = password; this.password = password;
} }
public Account(String username, String password, String api) {
this.username = username;
this.password = password;
this.api = api;
}
/** /**
* Gets user's parabot account name * Gets user's parabot account name
* @return username. * @return username.
@@ -68,4 +75,7 @@ public class Account {
return null; return null;
} }
public String getApi() {
return api;
}
} }
@@ -1,5 +1,6 @@
package org.parabot.core.forum; package org.parabot.core.forum;
import org.json.simple.JSONObject;
import org.parabot.core.Configuration; import org.parabot.core.Configuration;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.parsers.scripts.BDNScripts; import org.parabot.core.parsers.scripts.BDNScripts;
@@ -9,6 +10,8 @@ import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.scripts.executers.BDNScriptsExecuter; import org.parabot.environment.scripts.executers.BDNScriptsExecuter;
import org.parabot.environment.servers.executers.PublicServerExecuter; import org.parabot.environment.servers.executers.PublicServerExecuter;
import java.io.BufferedReader;
import java.net.URL;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
@@ -61,21 +64,26 @@ public final class AccountManager {
if (account != null) { if (account != null) {
throw new IllegalStateException("Already logged in."); throw new IllegalStateException("Already logged in.");
} }
String contents; JSONObject result;
try { try {
contents = WebUtil.getContents(String.format( BufferedReader contents = WebUtil.getReader(WebUtil.getConnection(
Configuration.LOGIN_SERVER, new URL(Configuration.LOGIN_SERVER),
URLEncoder.encode(user, "UTF-8"), URLEncoder.encode(user, "UTF-8"),
URLEncoder.encode(pass, "UTF-8"))); URLEncoder.encode(pass, "UTF-8")));
result = (JSONObject) WebUtil.getJsonParser().parse(contents);
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
return false; return false;
} }
if (contents.equals("correct")) { if (result != null){
account = new Account(user, pass); if (result.get("complete") != null) {
String api = (String) ((JSONObject) result.get("data")).get("api");
account = new Account(user, pass, api);
return true; return true;
} }
}
return false; return false;
} }
@@ -0,0 +1,67 @@
package org.parabot.core.lib.naga;
import org.parabot.core.Core;
import org.parabot.core.Directories;
import org.parabot.core.build.BuildPath;
import org.parabot.core.lib.Library;
import java.io.File;
import java.net.URL;
/**
* @author JKetelaar
*/
public class Naga extends Library {
private static boolean valid;
@Override
public void init() {
if (!hasJar()) {
System.err.println("Failed to load javafx... [jar missing]");
return;
}
Core.verbose("Adding javafx jar file to build path: "
+ getJarFileURL().getPath());
BuildPath.add(getJarFileURL());
try {
Class.forName("javafx.application.Application");
valid = true;
} catch (ClassNotFoundException e) {
System.err
.println("Failed to add javafx to build path, or incorrupt download");
}
Core.verbose("JavaFX initialized.");
}
@Override
public boolean isAdded() {
return valid;
}
@Override
public File getJarFile() {
return new File(Directories.getCachePath(), "naga.jar");
}
@Override
public URL getDownloadLink() {
try {
return new URL("http://bdn.parabot.org/api/v2/data/dependencies/naga");
} catch (Throwable t) {
t.printStackTrace();
}
return null;
}
@Override
public String getLibraryName() {
return "Naga";
}
public static boolean isValid() {
return valid;
}
}
+18 -7
View File
@@ -15,11 +15,9 @@ import java.awt.event.*;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
*
* The bot user interface * The bot user interface
* *
* @author Dane, Everel, Paradox * @author Dane, Everel, Paradox
*
*/ */
public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener { public class BotUI extends JFrame implements ActionListener, ComponentListener, WindowListener {
@@ -72,10 +70,13 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
JMenu file = new JMenu("File"); JMenu file = new JMenu("File");
JMenu scripts = new JMenu("Script"); JMenu scripts = new JMenu("Script");
JMenuItem screenshot = new JMenuItem("Create screenshot");
JMenuItem proxy = new JMenuItem("Network"); JMenuItem proxy = new JMenuItem("Network");
JMenuItem randoms = new JMenuItem("Randoms"); JMenuItem randoms = new JMenuItem("Randoms");
JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog"); JMenuItem dialog = new JCheckBoxMenuItem("Disable dialog");
JMenuItem api = new JMenuItem("Set API key");
if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) { if (!OperatingSystem.getOS().equals(OperatingSystem.WINDOWS)) {
dialog.setSelected(true); dialog.setSelected(true);
} }
@@ -94,6 +95,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
stop.setEnabled(false); stop.setEnabled(false);
stop.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/stop.png"))); stop.setIcon(new ImageIcon(Images.getResource("/org/parabot/core/ui/images/stop.png")));
screenshot.addActionListener(this);
proxy.addActionListener(this); proxy.addActionListener(this);
randoms.addActionListener(this); randoms.addActionListener(this);
dialog.addActionListener(this); dialog.addActionListener(this);
@@ -103,7 +105,9 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
run.addActionListener(this); run.addActionListener(this);
pause.addActionListener(this); pause.addActionListener(this);
stop.addActionListener(this); stop.addActionListener(this);
api.addActionListener(this);
file.add(screenshot);
file.add(proxy); file.add(proxy);
file.add(randoms); file.add(randoms);
file.add(dialog); file.add(dialog);
@@ -113,6 +117,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
scripts.add(run); scripts.add(run);
scripts.add(pause); scripts.add(pause);
scripts.add(stop); scripts.add(stop);
scripts.add(api);
menuBar.add(file); menuBar.add(file);
menuBar.add(scripts); menuBar.add(scripts);
@@ -125,6 +130,12 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
String command = e.getActionCommand(); String command = e.getActionCommand();
switch (command) { switch (command) {
case "Set API key":
String api = JOptionPane.showInputDialog(this, "You can gather your API key from http://bdn.parabot.org/account/");
break;
case "Create screenshot":
JOptionPane.showMessageDialog(this, "We are still working on this...");
break;
case "Exit": case "Exit":
System.exit(0); System.exit(0);
break; break;
@@ -142,7 +153,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
new ReflectUI().setVisible(true); new ReflectUI().setVisible(true);
break; break;
case "Run": case "Run":
if(pauseScript) { if (pauseScript) {
pauseScript = false; pauseScript = false;
pause.setEnabled(true); pause.setEnabled(true);
run.setEnabled(false); run.setEnabled(false);
@@ -174,7 +185,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
@Override @Override
public void componentMoved(ComponentEvent e) { public void componentMoved(ComponentEvent e) {
if(dialog == null || !isVisible()) { if (dialog == null || !isVisible()) {
return; return;
} }
Point gameLocation = GamePanel.getInstance().getLocationOnScreen(); Point gameLocation = GamePanel.getInstance().getLocationOnScreen();
@@ -183,7 +194,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
public void toggleRun() { public void toggleRun() {
runScript = !runScript; runScript = !runScript;
if(runScript) { if (runScript) {
scriptRunning(); scriptRunning();
} else { } else {
scriptStopped(); scriptStopped();
@@ -210,7 +221,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
if(isVisible()) { if (isVisible()) {
BotDialog.getInstance().setSize(getSize()); BotDialog.getInstance().setSize(getSize());
} }
} }
@@ -242,7 +253,7 @@ public class BotUI extends JFrame implements ActionListener, ComponentListener,
@Override @Override
public void windowDeiconified(WindowEvent arg0) { public void windowDeiconified(WindowEvent arg0) {
if(isVisible()) { if (isVisible()) {
BotDialog.getInstance().setVisible(false); BotDialog.getInstance().setVisible(false);
BotDialog.getInstance().setVisible(true); BotDialog.getInstance().setVisible(true);
} }
@@ -1,5 +1,6 @@
package org.parabot.core.ui; package org.parabot.core.ui;
import org.parabot.core.Context;
import org.parabot.core.ui.components.GamePanel; import org.parabot.core.ui.components.GamePanel;
import javax.swing.*; import javax.swing.*;
@@ -46,5 +47,9 @@ public class Logger extends JPanel {
public static void addMessage(String message){ public static void addMessage(String message){
instance.model.addElement(message); instance.model.addElement(message);
if (Context.getInstance().getUlirathaClient() != null) {
Context.getInstance().getUlirathaClient().sendMessage(message);
}
} }
} }
@@ -52,7 +52,7 @@ public class LoginUI extends JFrame {
} else { } else {
Core.verbose("Failed to log in."); Core.verbose("Failed to log in.");
JOptionPane.showMessageDialog(null, JOptionPane.showMessageDialog(null,
"Incorrect username or password.", "Error", "Incorrect username or password. Have you tried logging into http://bdn.parabot.org/account/", "Error",
JOptionPane.ERROR_MESSAGE); JOptionPane.ERROR_MESSAGE);
} }
@@ -4,6 +4,7 @@ import org.parabot.core.Core;
import org.parabot.core.desc.ServerDescription; import org.parabot.core.desc.ServerDescription;
import org.parabot.core.lib.Library; import org.parabot.core.lib.Library;
import org.parabot.core.lib.javafx.JavaFX; import org.parabot.core.lib.javafx.JavaFX;
import org.parabot.core.lib.naga.Naga;
import org.parabot.core.parsers.servers.ServerParser; import org.parabot.core.parsers.servers.ServerParser;
import org.parabot.core.ui.components.VerboseLoader; import org.parabot.core.ui.components.VerboseLoader;
import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.api.utils.WebUtil;
@@ -29,6 +30,7 @@ public class Environment {
LinkedList<Library> libs = new LinkedList<>(); LinkedList<Library> libs = new LinkedList<>();
libs.add(new JavaFX()); libs.add(new JavaFX());
libs.add(new Naga());
for(Library lib : libs) { for(Library lib : libs) {
if(!lib.hasJar()) { if(!lib.hasJar()) {
@@ -1,5 +1,6 @@
package org.parabot.environment.api.utils; package org.parabot.environment.api.utils;
import org.json.simple.parser.JSONParser;
import org.parabot.core.io.ProgressListener; import org.parabot.core.io.ProgressListener;
import org.parabot.core.io.SizeInputStream; import org.parabot.core.io.SizeInputStream;
@@ -17,6 +18,9 @@ import java.net.URLEncoder;
* *
*/ */
public class WebUtil { public class WebUtil {
private static JSONParser jsonParser;
private static String agent = "Mozilla/5.0 (Wind0ws NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"; private static String agent = "Mozilla/5.0 (Wind0ws NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1";
/** /**
@@ -267,4 +271,10 @@ public class WebUtil {
return null; return null;
} }
public static JSONParser getJsonParser() {
if (jsonParser == null){
jsonParser = new JSONParser();
}
return jsonParser;
}
} }
@@ -3,6 +3,7 @@ package org.parabot.environment.scripts;
import org.parabot.core.Context; import org.parabot.core.Context;
import org.parabot.core.Core; import org.parabot.core.Core;
import org.parabot.core.ui.BotUI; import org.parabot.core.ui.BotUI;
import org.parabot.core.ui.Logger;
import org.parabot.environment.api.utils.Time; import org.parabot.environment.api.utils.Time;
import org.parabot.environment.scripts.framework.*; import org.parabot.environment.scripts.framework.*;
import org.parabot.environment.scripts.framework.Frameworks; import org.parabot.environment.scripts.framework.Frameworks;
@@ -66,14 +67,6 @@ public class Script implements Runnable {
public final void run() { public final void run() {
Context context = Context.getInstance(); Context context = Context.getInstance();
// Core.verbose("Initializing security manager...");
// String previousPolicy = System.getProperty("java.security.policy");
// SecurityManager previousSecurityManager = System.getSecurityManager();
// System.setProperty("java.security.policy", Directories.getSettingsPath() + "/java.policy");
// SecurityManagerDemo sm = new SecurityManagerDemo();
// System.setSecurityManager(sm);
Core.verbose("Initializing script..."); Core.verbose("Initializing script...");
context.getServerProvider().initScript(this); context.getServerProvider().initScript(this);
Core.verbose("Done."); Core.verbose("Done.");
@@ -102,7 +95,7 @@ public class Script implements Runnable {
frameWorkType = TYPE_OTHER; frameWorkType = TYPE_OTHER;
} }
Core.verbose("Running script..."); Core.verbose("Running script...");
System.out.println("Script started."); Logger.addMessage("Script started.");
try { try {
while(this.state != STATE_STOPPED) { while(this.state != STATE_STOPPED) {
if(context.getRandomHandler().checkAndRun()) { if(context.getRandomHandler().checkAndRun()) {
@@ -122,13 +115,17 @@ public class Script implements Runnable {
} }
Core.verbose("Script stopped/finished, unloading and stopping..."); Core.verbose("Script stopped/finished, unloading and stopping...");
onFinish(); onFinish();
System.out.println("Script stopped."); Logger.addMessage("Script stopped.");
context.getServerProvider().unloadScript(this); context.getServerProvider().unloadScript(this);
this.state = STATE_STOPPED; this.state = STATE_STOPPED;
context.setRunningScript(null); context.setRunningScript(null);
if (context.getUlirathaClient() != null) {
context.getUlirathaClient().disconnect();
context.setUlirathaClient(null);
}
BotUI.getInstance().toggleRun(); BotUI.getInstance().toggleRun();
// System.setProperty("java.security.policy", previousPolicy);
// System.setSecurityManager(previousSecurityManager);
Core.verbose("Done."); Core.verbose("Done.");
} }
@@ -167,4 +164,7 @@ public class Script implements Runnable {
Time.sleep(ms); Time.sleep(ms);
} }
public int getState() {
return state;
}
} }
@@ -8,6 +8,7 @@ import org.parabot.core.ui.utils.UILog;
import org.parabot.environment.api.utils.WebUtil; import org.parabot.environment.api.utils.WebUtil;
import org.parabot.environment.scripts.Script; import org.parabot.environment.scripts.Script;
import org.parabot.environment.scripts.loader.JavaScriptLoader; import org.parabot.environment.scripts.loader.JavaScriptLoader;
import org.parabot.environment.scripts.uliratha.UlirathaExecuter;
import javax.swing.*; import javax.swing.*;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@@ -47,24 +48,23 @@ public class BDNScriptsExecuter extends ScriptExecuter {
Configuration.GET_SCRIPT + this.id), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword()); Configuration.GET_SCRIPT + this.id), manager.getAccount().getURLUsername(), manager.getAccount().getURLPassword());
final String contentType = urlConnection.getHeaderField("Content-type"); final String contentType = urlConnection.getHeaderField("Content-type");
if(contentType.equals("text/html")) { switch (contentType) {
case "text/html":
// failed to fetch script // failed to fetch script
UILog.log("Error", "Failed to load BDN script, error: [Page returned: " + WebUtil.getContents(urlConnection) + "]", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, error: [Page returned: " + WebUtil.getContents(urlConnection) + "]", JOptionPane.ERROR_MESSAGE);
} else if(contentType.equals("application/jar")) { break;
case "application/jar":
//// JAR LOADING PART //////// //// JAR LOADING PART ////////
// succesfull request, jar returned // succesfull request, jar returned
final ClassPath classPath = new ClassPath(); final ClassPath classPath = new ClassPath();
classPath.addJar(urlConnection); classPath.addJar(urlConnection);
final JavaScriptLoader loader = new JavaScriptLoader(classPath); final JavaScriptLoader loader = new JavaScriptLoader(classPath);
final String[] scriptClasses = loader.getScriptClassNames(); final String[] scriptClasses = loader.getScriptClassNames();
if(scriptClasses == null || scriptClasses.length == 0) { if (scriptClasses == null || scriptClasses.length == 0) {
UILog.log("Error", "Failed to load BDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, error: [No script found in jar file.]", JOptionPane.ERROR_MESSAGE);
return; return;
} else if(scriptClasses.length > 1) { } else if (scriptClasses.length > 1) {
UILog.log("Error", "Failed to load BDN script, error: [Multiple scripts found in jar file.]"); UILog.log("Error", "Failed to load BDN script, error: [Multiple scripts found in jar file.]");
return; return;
} }
@@ -75,23 +75,25 @@ public class BDNScriptsExecuter extends ScriptExecuter {
final Constructor<?> con = scriptClass.getConstructor(); final Constructor<?> con = scriptClass.getConstructor();
final Script script = (Script) con.newInstance(); final Script script = (Script) con.newInstance();
super.finalize(tg, script); super.finalize(tg, script);
if (manager.getAccount().getApi() != null) {
new UlirathaExecuter(manager.getAccount().getApi()).start(this.id);
}
} catch (NoClassDefFoundError | ClassNotFoundException ignored) { } catch (NoClassDefFoundError | ClassNotFoundException ignored) {
UILog.log("Error", "Failed to load BDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, error: [This server provider does not support this script]", JOptionPane.ERROR_MESSAGE);
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
} }
//// END JAR LOADING //// //// END JAR LOADING ////
break;
} else { default:
UILog.log("Error", "Failed to load BDN script, error: [Unknown content type: " + contentType + "]", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, error: [Unknown content type: " + contentType + "]", JOptionPane.ERROR_MESSAGE);
break;
} }
} catch (Throwable t) { } catch (Throwable t) {
t.printStackTrace(); t.printStackTrace();
UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE); UILog.log("Error", "Failed to load BDN script, post the stacktrace/error on the parabot forums.", JOptionPane.ERROR_MESSAGE);
} }
} }
} }
@@ -1,5 +0,0 @@
package org.parabot.environment.scripts.executers;
public class SecurityManagerDemo extends SecurityManager {
}
@@ -0,0 +1,156 @@
package org.parabot.environment.scripts.uliratha;
import naga.ExceptionObserver;
import naga.NIOService;
import naga.NIOSocket;
import naga.SocketObserver;
import naga.packetreader.RegularPacketReader;
import naga.packetwriter.RegularPacketWriter;
import org.parabot.core.ui.Logger;
import java.io.*;
/**
* @author JKetelaar
*/
public class UlirathaClient extends Thread {
private String host;
private int port;
private NIOSocket socket;
private boolean connected;
private int scriptID;
private String api;
private boolean valid;
public UlirathaClient(String host, int port, int scriptID, String api) {
this.host = host;
this.port = port;
this.scriptID = scriptID;
this.api = api;
}
@Override
public void run() {
connect();
}
private void connect() {
try {
System.out.println("Connecting....");
NIOService service = new NIOService();
service.setExceptionObserver(new ExceptionObserver() {
@Override
public void notifyExceptionThrown(Throwable throwable) {
throwable.printStackTrace();
if (valid) {
reconnect();
connected = false;
}
}
});
socket = service.openSocket(host, port);
socket.setPacketReader(new RegularPacketReader(4, true));
socket.setPacketWriter(new RegularPacketWriter(4, true));
socket.listen(new SocketObserver() {
public void connectionOpened(NIOSocket nioSocket) {
try {
sendObjects(nioSocket, new Object[]{76, scriptID, api});
} catch (IOException e) {
e.printStackTrace();
}
}
public void packetReceived(NIOSocket socket, byte[] packet) {
try {
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(packet));
int packetID = stream.readInt();
switch (packetID){
case 75:
valid = stream.readBoolean();
if (valid) {
Logger.addMessage("We're connected with the Uliratha server!");
connected = true;
}else{
socket.close();
}
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void packetSent(NIOSocket nioSocket, Object o) {
}
public void connectionBroken(NIOSocket nioSocket, Exception exception) {
if (valid) {
reconnect();
connected = false;
}
}
});
while (true) {
service.selectBlocking();
}
} catch (IOException e) {
if (valid) {
reconnect();
connected = false;
}
}
}
private void reconnect() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
connect();
}
public boolean isConnected() {
return connected;
}
public void disconnect(){
valid = false;
socket.close();
}
private void sendObjects(NIOSocket socket, Object[] objects) throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
DataOutputStream dataStream = new DataOutputStream(stream);
for (Object o : objects) {
if (o instanceof String) {
dataStream.writeUTF((String) o);
} else if (o instanceof Integer) {
dataStream.writeInt((Integer) o);
} else if (o instanceof byte[]) {
dataStream.write((byte[]) o);
} else if (o instanceof Long) {
dataStream.writeLong((Long) o);
} else if (o instanceof Boolean) {
dataStream.writeBoolean((Boolean) o);
}
}
dataStream.flush();
final byte[] content = stream.toByteArray();
dataStream.close();
socket.write(content);
}
public void sendMessage(String message){
try {
sendObjects(socket, new Object[]{83, message});
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -0,0 +1,49 @@
package org.parabot.environment.scripts.uliratha;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.parabot.core.Context;
import org.parabot.environment.api.utils.WebUtil;
import java.io.IOException;
/**
* @author JKetelaar
*/
public class UlirathaExecuter {
private String api;
private static boolean isVip = true;
public UlirathaExecuter(String api){
this.api = api;
}
public void start(int scriptID){
if (UlirathaExecuter.isVip) {
String vipUrl = "http://bdn.parabot.org/api/v2/user/" + api + "/vip";
JSONParser parser = new JSONParser();
try {
JSONObject vipObject = (JSONObject) parser.parse(WebUtil.getReader(vipUrl));
boolean isVip = (boolean) vipObject.get("result");
if (isVip) {
String serverUrl = "http://bdn.parabot.org/api/v2/clients/server";
JSONObject serverObject = (JSONObject) parser.parse(WebUtil.getReader(serverUrl));
JSONObject detailsObject = (JSONObject) serverObject.get("result");
String host = (String) detailsObject.get("host");
long port = (long) detailsObject.get("port");
UlirathaClient client = new UlirathaClient(host, (int) port, scriptID, api);
client.start();
Context.getInstance().setUlirathaClient(client);
}else{
UlirathaExecuter.isVip = false;
}
} catch (IOException | ParseException | ClassCastException e) {
e.printStackTrace();
}
}
}
}
@@ -3,7 +3,6 @@ package org.parabot.environment.servers.executers;
import org.parabot.core.Context; import org.parabot.core.Context;
import org.parabot.core.parsers.randoms.RandomParser; import org.parabot.core.parsers.randoms.RandomParser;
import org.parabot.core.ui.components.PaintComponent; import org.parabot.core.ui.components.PaintComponent;
import org.parabot.environment.scripts.executers.SecurityManagerDemo;
import org.parabot.environment.servers.ServerProvider; import org.parabot.environment.servers.ServerProvider;
/** /**