mirror of
https://github.com/2006-Scape/Parabot.git
synced 2026-07-03 00:37:55 +00:00
Updated whole environment
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
/id_rsa
|
||||
/id_rsa.pub
|
||||
/known_hosts
|
||||
@@ -0,0 +1,3 @@
|
||||
/id_rsa
|
||||
/id_rsa.pub
|
||||
/known_hosts
|
||||
@@ -2,6 +2,8 @@ package org.parabot;
|
||||
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import org.parabot.core.Core;
|
||||
import org.parabot.core.Directories;
|
||||
import org.parabot.core.ui.ServerSelector;
|
||||
|
||||
/**
|
||||
@@ -19,6 +21,8 @@ public class Landing {
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
Directories.validate();
|
||||
Core.enableDevMode();
|
||||
ServerSelector.getInstance().setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
package org.parabot.core;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
import javax.swing.JFileChooser;
|
||||
import javax.swing.filechooser.FileSystemView;
|
||||
|
||||
import org.parabot.environment.OperatingSystem;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Clisprail
|
||||
* @author Matt
|
||||
*
|
||||
*/
|
||||
public class Directories {
|
||||
|
||||
/**
|
||||
* Gets default user directory
|
||||
* @return default user director
|
||||
*/
|
||||
public static File getDefaultDirectory() {
|
||||
switch (OperatingSystem.getOS()) {
|
||||
case WINDOWS:
|
||||
JFileChooser fr = new JFileChooser();
|
||||
FileSystemView fw = fr.getFileSystemView();
|
||||
return fw.getDefaultDirectory();
|
||||
default:
|
||||
return new File(System.getProperty("user.home"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets bot workspace
|
||||
* @return workspace of bot
|
||||
*/
|
||||
public static File getWorkspace() {
|
||||
return new File(getDefaultDirectory(), "/Parabot/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get script sources path
|
||||
* @return script sources path
|
||||
*/
|
||||
public static File getScriptSourcesPath() {
|
||||
return new File(getDefaultDirectory(), "/Parabot/scripts/sources/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get script compiled path
|
||||
* @return script compiled path
|
||||
*/
|
||||
public static File getScriptCompiledPath() {
|
||||
return new File(getDefaultDirectory(), "/Parabot/scripts/compiled/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets settings directory
|
||||
* @return settings directory
|
||||
*/
|
||||
public static File getSettingsPath() {
|
||||
return new File(getDefaultDirectory(), "/Parabot/settings/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets servers directory
|
||||
* @return servers directory
|
||||
*/
|
||||
public static File getServerPath() {
|
||||
return new File(getDefaultDirectory(), "/Parabot/servers/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates all directories and makes them if necessary
|
||||
*/
|
||||
public static void validate() {
|
||||
final File defaultPath = getDefaultDirectory();
|
||||
if(defaultPath == null || !defaultPath.exists()) {
|
||||
throw new RuntimeException("Default path not found");
|
||||
}
|
||||
final Queue<File> files = new LinkedList<File>();
|
||||
files.add(getWorkspace());
|
||||
files.add(getServerPath());
|
||||
files.add(getSettingsPath());
|
||||
files.add(getScriptSourcesPath());
|
||||
files.add(getScriptCompiledPath());
|
||||
while(files.size() > 0) {
|
||||
final File file = files.poll();
|
||||
if(!file.exists()) {
|
||||
file.mkdirs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,5 +2,6 @@ package org.parabot.core;
|
||||
|
||||
public class WebConstants {
|
||||
public static final String HOME = "http://parnassian.host56.com/";
|
||||
public static final String SERVER_MANIFEST = HOME + "servers/manifest.dat";
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
package org.parabot.core.desc;
|
||||
|
||||
public class ServerDescription {
|
||||
public String serverName = null;
|
||||
public String author = null;
|
||||
public int revision = 0;
|
||||
public int providerIndex = -1;
|
||||
|
||||
public ServerDescription(final String serverName, final String author, final int revision, final int providerIndex) {
|
||||
this.serverName = serverName;
|
||||
this.author = author;
|
||||
this.revision = revision;
|
||||
this.providerIndex = providerIndex;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
package org.parabot.core.parsers;
|
||||
|
||||
import java.net.URL;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.parabot.core.Core;
|
||||
import org.parabot.core.Directories;
|
||||
import org.parabot.core.classpath.ClassPath;
|
||||
import org.parabot.core.desc.ServerDescription;
|
||||
import org.parabot.environment.servers.ServerManifest;
|
||||
import org.parabot.environment.servers.ServerProvider;
|
||||
import org.parabot.environment.servers.loader.ServerLoader;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -11,11 +20,7 @@ import org.parabot.core.desc.ServerDescription;
|
||||
*
|
||||
*/
|
||||
public class ServerManifestParser {
|
||||
private URL url = null;
|
||||
|
||||
public ServerManifestParser(final URL url) {
|
||||
this.url = url;
|
||||
}
|
||||
public static Map<ServerDescription, ServerCache> cache = new HashMap<ServerDescription, ServerCache>();
|
||||
|
||||
/**
|
||||
* Gets server descriptions
|
||||
@@ -33,8 +38,53 @@ public class ServerManifestParser {
|
||||
}
|
||||
|
||||
private ServerDescription[] localDesc() {
|
||||
return null;
|
||||
final ClassPath path = new ClassPath();
|
||||
path.loadClasses(Directories.getServerPath(), null);
|
||||
final ServerLoader loader = new ServerLoader(path);
|
||||
final List<ServerProvider> providers = new ArrayList<ServerProvider>();
|
||||
final List<ServerDescription> descs = new ArrayList<ServerDescription>();
|
||||
for(final String className : loader.getServerClassNames()) {
|
||||
try {
|
||||
final Class<?> serverProviderClass = loader.loadClass(className);
|
||||
final Object annotation = serverProviderClass.getAnnotation(ServerManifest.class);
|
||||
if(annotation == null) {
|
||||
throw new RuntimeException("Missing manifest at " + className);
|
||||
}
|
||||
final ServerManifest manifest = (ServerManifest) annotation;
|
||||
final Constructor<?> con = serverProviderClass.getConstructor();
|
||||
final ServerProvider server = (ServerProvider) con.newInstance();
|
||||
providers.add(server);
|
||||
descs.add(new ServerDescription(manifest.name(), manifest.author(), 0, providers.size() - 1));
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
if(providers.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
final ServerCache cachedServer = new ServerCache(loader, providers.toArray(new ServerProvider[providers.size()]));
|
||||
for(final ServerDescription desc : descs) {
|
||||
cache.put(desc, cachedServer);
|
||||
}
|
||||
return descs.toArray(new ServerDescription[descs.size()]);
|
||||
}
|
||||
|
||||
public class ServerCache {
|
||||
private ServerLoader serverLoader = null;
|
||||
private ServerProvider[] serverProviders = null;
|
||||
|
||||
private ServerCache(final ServerLoader serverLoader, final ServerProvider[] serverProviders) {
|
||||
this.serverLoader = serverLoader;
|
||||
this.serverProviders = serverProviders;
|
||||
}
|
||||
|
||||
public ServerLoader getLoader() {
|
||||
return serverLoader;
|
||||
}
|
||||
|
||||
public ServerProvider[] getProviders() {
|
||||
return serverProviders;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,42 +1,44 @@
|
||||
package org.parabot.core.ui;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JScrollPane;
|
||||
|
||||
import org.parabot.core.desc.ServerDescription;
|
||||
import org.parabot.core.parsers.ServerManifestParser;
|
||||
import org.parabot.core.ui.utils.Center;
|
||||
import org.parabot.core.ui.widgets.ServerWidget;
|
||||
|
||||
|
||||
public class ServerSelector extends JFrame
|
||||
{
|
||||
public class ServerSelector extends JFrame {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static ServerSelector instance = null;
|
||||
|
||||
public static ServerSelector getInstance() {
|
||||
if(instance != null) {
|
||||
if (instance != null) {
|
||||
instance.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||
return instance;
|
||||
}
|
||||
return instance = new ServerSelector();
|
||||
}
|
||||
|
||||
|
||||
public ServerSelector() {
|
||||
setLayout(null);
|
||||
ServerWidget[] widgets = getServers();
|
||||
Queue<ServerWidget> widgets = getServers();
|
||||
JPanel p = new JPanel();
|
||||
p.setBounds(0, 0, 400, 800);
|
||||
p.setLayout(null);
|
||||
p.setPreferredSize(new Dimension(400, widgets.length * 100));
|
||||
p.setPreferredSize(new Dimension(400, widgets.size() * 100));
|
||||
JScrollPane pane = new JScrollPane(p);
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
for (int i = 0; i < widgets.length; i++) {
|
||||
widgets[i].setBounds(0, i * 100, 400, 100);
|
||||
p.add(widgets[i]);
|
||||
final int count = widgets.size() - 1;
|
||||
while (widgets.size() > 0) {
|
||||
final ServerWidget widget = widgets.poll();
|
||||
widget.setBounds(0, (count - widgets.size()) * 100, 400, 100);
|
||||
p.add(widget);
|
||||
}
|
||||
pane.setBounds(0, 0, 400, 200);
|
||||
pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
|
||||
@@ -47,12 +49,13 @@ public class ServerSelector extends JFrame
|
||||
Center.centerFramea(this, 406, 228);
|
||||
}
|
||||
|
||||
public ServerWidget[] getServers() {
|
||||
ArrayList<ServerWidget> widgets = new ArrayList<ServerWidget>();
|
||||
widgets.add(new ServerWidget("RecklessPk", "Clisprail", "317"));
|
||||
widgets.add(new ServerWidget("Soulsplit", "Clisprail", "317"));
|
||||
return widgets.toArray(new ServerWidget[widgets.size()]);
|
||||
public Queue<ServerWidget> getServers() {
|
||||
final Queue<ServerWidget> widgets = new LinkedList<ServerWidget>();
|
||||
for (ServerDescription desc : new ServerManifestParser()
|
||||
.getDescriptions()) {
|
||||
widgets.add(new ServerWidget(desc));
|
||||
}
|
||||
return widgets;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -7,13 +7,11 @@ import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import org.parabot.core.WebConstants;
|
||||
import org.parabot.core.desc.ServerDescription;
|
||||
import org.parabot.environment.Environment;
|
||||
|
||||
/**
|
||||
@@ -25,27 +23,23 @@ public class ServerWidget extends JPanel {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private String name = null;
|
||||
public ServerDescription desc = null;
|
||||
|
||||
final ActionListener play = new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
try {
|
||||
load(new URL(WebConstants.HOME + name
|
||||
+ ".jar"), name);
|
||||
} catch (MalformedURLException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
load(desc, name);
|
||||
}
|
||||
};
|
||||
|
||||
public ServerWidget(final String serverName, final String author,
|
||||
final String revision) {
|
||||
public ServerWidget(final ServerDescription desc) {
|
||||
this.desc = desc;
|
||||
setLayout(null);
|
||||
this.name = serverName.replaceAll(" ", "");
|
||||
this.name = desc.serverName.replaceAll(" ", "");
|
||||
JLabel l = new JLabel();
|
||||
l.setFont(new Font("Arial", Font.BOLD, 16));
|
||||
l.setForeground(Color.white);
|
||||
l.setText(serverName);
|
||||
l.setText(desc.serverName);
|
||||
l.setBounds(10, 10, 100, 20);
|
||||
add(l);
|
||||
final Font f = new Font("Arial", Font.PLAIN, 12);
|
||||
@@ -54,13 +48,13 @@ public class ServerWidget extends JPanel {
|
||||
l.setFont(f);
|
||||
l.setForeground(Color.white);
|
||||
l.setBounds(10, 45, 100, 20);
|
||||
l.setText("Author: " + author);
|
||||
l.setText("Author: " + desc.author);
|
||||
add(l);
|
||||
l = new JLabel();
|
||||
l.setFont(f);
|
||||
l.setForeground(Color.white);
|
||||
l.setBounds(10, 60, 100, 20);
|
||||
l.setText("Revision: " + revision);
|
||||
l.setText("Revision: " + desc.revision);
|
||||
add(l);
|
||||
final JButton b = new JButton("Start");
|
||||
b.setFocusable(false);
|
||||
@@ -90,7 +84,7 @@ public class ServerWidget extends JPanel {
|
||||
g2d.fillRect(0, 0, w, h);
|
||||
}
|
||||
|
||||
public void load(final URL url, final String serverName) {
|
||||
Environment.load(url, serverName);
|
||||
public void load(final ServerDescription desc, final String serverName) {
|
||||
Environment.load(desc, serverName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package org.parabot.environment;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.net.URL;
|
||||
|
||||
import org.parabot.core.Context;
|
||||
import org.parabot.core.Core;
|
||||
import org.parabot.core.classpath.ClassPath;
|
||||
import org.parabot.core.desc.ServerDescription;
|
||||
import org.parabot.core.parsers.ServerManifestParser;
|
||||
import org.parabot.core.parsers.ServerManifestParser.ServerCache;
|
||||
import org.parabot.core.ui.BotUI;
|
||||
import org.parabot.core.ui.ServerSelector;
|
||||
import org.parabot.core.ui.components.BotToolbar;
|
||||
@@ -22,38 +24,53 @@ public class Environment {
|
||||
* Loads a new environment
|
||||
* @param url
|
||||
*/
|
||||
public static void load(final URL url, final String serverName) {
|
||||
public static void load(final ServerDescription desc, final String serverName) {
|
||||
ServerSelector.getInstance().dispose();
|
||||
if(!BotUI.getInstance().isVisible()) {
|
||||
BotUI.getInstance().setVisible(true);
|
||||
}
|
||||
|
||||
final ClassPath classPath = new ClassPath();
|
||||
classPath.addJar(url.toString());
|
||||
|
||||
final ServerLoader serverLoader = new ServerLoader(classPath);
|
||||
final String[] serverProviders = serverLoader.getServerClassNames();
|
||||
if (serverProviders == null) {
|
||||
throw new RuntimeException("No server provided.");
|
||||
|
||||
final ClassPath classPath = Core.isDevMode() ? null : new ClassPath();
|
||||
final ServerCache cache = Core.isDevMode() ? ServerManifestParser.cache.get(desc) : null;
|
||||
|
||||
final ServerLoader serverLoader = Core.isDevMode() ? cache.getLoader() : new ServerLoader(classPath);
|
||||
String[] serverProviders = null;
|
||||
if(!Core.isDevMode()) {
|
||||
serverProviders = serverLoader.getServerClassNames();
|
||||
if (serverProviders == null) {
|
||||
throw new RuntimeException("No server provided.");
|
||||
}
|
||||
}
|
||||
|
||||
final String id = "tab" + Context.getID();
|
||||
final ThreadGroup bot = new ThreadGroup(id);
|
||||
new Thread(bot, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
final Class<?> serverProviderClass = serverLoader.loadClass(serverProviders[0]);
|
||||
final Constructor<?> con = serverProviderClass.getConstructor();
|
||||
ServerProvider server = (ServerProvider) con.newInstance();
|
||||
server.context.setEnvironment(serverLoader);
|
||||
BotToolbar.getInstance().addTab(server.context, serverName);
|
||||
server.context.load();
|
||||
final ServerProvider server = !Core.isDevMode() ? fetchServerProvider(serverLoader) : cache.getProviders()[desc.providerIndex];
|
||||
final Context context = new Context(server);
|
||||
context.setEnvironment(serverLoader);
|
||||
BotToolbar.getInstance().addTab(context, serverName);
|
||||
context.load();
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error while loading server. " + t.getMessage());
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private static ServerProvider fetchServerProvider(ServerLoader loader) {
|
||||
try {
|
||||
final String[] serverProviders = loader.getServerClassNames();
|
||||
if (serverProviders == null) {
|
||||
throw new RuntimeException("No server provided.");
|
||||
}
|
||||
final Class<?> serverProviderClass = loader.loadClass(serverProviders[0]);
|
||||
final Constructor<?> con = serverProviderClass.getConstructor();
|
||||
return (ServerProvider) con.newInstance();
|
||||
} catch (Throwable t) {
|
||||
throw new RuntimeException("Error while loading server. " + t.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,7 +13,6 @@ import org.parabot.core.Context;
|
||||
*
|
||||
*/
|
||||
public abstract class ServerProvider {
|
||||
public Context context = new Context(this);
|
||||
|
||||
/**
|
||||
* Hooks to parse
|
||||
@@ -47,7 +46,7 @@ public abstract class ServerProvider {
|
||||
}
|
||||
|
||||
public void parseJar() {
|
||||
context.getClassPath().addJar(getJar());
|
||||
Context.resolve().getClassPath().addJar(getJar());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user