More changes. API is going well, but struggling to break it up into sensible classes whilst allowing for the fact that in the future we will have:

- Player to Proxy
- Proxy to Proxy
- Player to Internal Server
Connections.
This commit is contained in:
md_5 2013-01-11 09:49:54 +11:00
parent 5402bd2cb1
commit 434b950a92
13 changed files with 149 additions and 68 deletions

View File

@ -6,13 +6,13 @@
<parent> <parent>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-parent</artifactId> <artifactId>bungeecord-parent</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.4.7-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId> <artifactId>bungeecord-api</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.4.7-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>BungeeCord-API</name> <name>BungeeCord-API</name>

View File

@ -0,0 +1,21 @@
package net.md_5.bungee.api;
import java.util.Collection;
public interface CommandSender
{
public String getName();
public void sendMessage(String message);
public Collection<String> getGroups();
public void addGroups(String... groups);
public void removeGroups(String... groups);
public boolean hasPermission(String permission);
public boolean setPermission(String permission, boolean value);
}

View File

@ -0,0 +1,8 @@
package net.md_5.bungee.api;
/**
* Represents a player physically connected to the world hosted on this server.
*/
public interface ConnectedPlayer extends ProxiedPlayer
{
}

View File

@ -7,7 +7,7 @@ import java.net.InetSocketAddress;
* It should expose information about the remote peer, however not be specific * It should expose information about the remote peer, however not be specific
* to a type of connection, whether server or player. * to a type of connection, whether server or player.
*/ */
public abstract class ProxyConnection public interface Connection
{ {
/** /**
@ -15,5 +15,5 @@ public abstract class ProxyConnection
* *
* @return the remote address * @return the remote address
*/ */
public abstract InetSocketAddress getAddress(); public InetSocketAddress getAddress();
} }

View File

@ -0,0 +1,9 @@
package net.md_5.bungee.api;
/**
* Represents a player who's connection is being connected to somewhere else,
* whether it be a remote or embedded server.
*/
public interface ProxiedPlayer extends Connection, CommandSender
{
}

View File

@ -5,21 +5,12 @@ import com.google.common.base.Preconditions;
import java.util.Collection; import java.util.Collection;
import java.util.logging.Logger; import java.util.logging.Logger;
import lombok.Getter; import lombok.Getter;
import org.yaml.snakeyaml.Yaml;
public abstract class ProxyServer public abstract class ProxyServer
{ {
@Getter @Getter
private static ProxyServer instance; private static ProxyServer instance;
private ThreadLocal<Yaml> yaml = new ThreadLocal<Yaml>()
{
@Override
protected Yaml initialValue()
{
return new Yaml();
}
};
/** /**
* Sets the proxy instance. This method may only be called once per an * Sets the proxy instance. This method may only be called once per an
@ -34,16 +25,6 @@ public abstract class ProxyServer
ProxyServer.instance = instance; ProxyServer.instance = instance;
} }
/**
* Gets a reusable, thread safe {@link Yaml} instance.
*
* @return an {@link Yaml} instance
*/
public Yaml getYaml()
{
return yaml.get();
}
/** /**
* Gets the name of the currently running proxy software. * Gets the name of the currently running proxy software.
* *
@ -71,7 +52,7 @@ public abstract class ProxyServer
* *
* @return all networked users * @return all networked users
*/ */
public abstract Collection<ProxyConnection> getConnections(); public abstract Collection<Connection> getConnections();
/** /**
* Get the {@link PluginManager} associated with loading plugins and * Get the {@link PluginManager} associated with loading plugins and

View File

@ -7,7 +7,7 @@ import lombok.RequiredArgsConstructor;
* Represents a destination which this proxy might connect to. * Represents a destination which this proxy might connect to.
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
public abstract class RemoteServer extends ProxyConnection public abstract class Server implements Connection
{ {
@Getter @Getter

View File

@ -0,0 +1,28 @@
package net.md_5.bungee.api.event;
import lombok.Data;
import net.md_5.bungee.api.Connection;
import net.md_5.bungee.api.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Cancellable;
@Data
public class ChatEvent implements Cancellable
{
/**
* Cancelled state.
*/
private boolean cancelled;
/**
* Where this message is being sent to.
*/
private final Connection destination;
/**
* User involved with sending or receiving this message.
*/
private final ProxiedPlayer player;
/**
* Text contained in this chat.
*/
private String message;
}

View File

@ -0,0 +1,34 @@
package net.md_5.bungee.api.event;
import java.net.InetAddress;
import lombok.Data;
import net.md_5.bungee.api.plugin.Cancellable;
/**
* Event called to represent a player logging in.
*/
@Data
public class LoginEvent implements Cancellable
{
/**
* Cancelled state.
*/
private boolean cancelled;
/**
* Message to use when kicking if this event is canceled.
*/
private String cancelReason;
/**
* Username which the player wishes to use.
*/
private final String username;
/**
* IP address of the remote connection.
*/
private final InetAddress address;
/**
* Hostname which the user tried to connect to.
*/
private final String hostname;
}

View File

@ -0,0 +1,35 @@
package net.md_5.bungee.api.event;
import lombok.Data;
import net.md_5.bungee.api.Connection;
import net.md_5.bungee.api.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Cancellable;
/**
* Event called when a plugin message is sent to the client or server.
*/
@Data
public class PluginMessageEvent implements Cancellable
{
/**
* Cancelled state.
*/
private boolean cancelled;
/**
* Dispatcher of this message.
*/
private final Connection sender;
/**
* Player involved with sending or receiving this message.
*/
private final ProxiedPlayer player;
/**
* Tag specified for this plugin message.
*/
private String tag;
/**
* Data contained in this plugin message.
*/
private byte[] data;
}

View File

@ -14,6 +14,7 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.logging.Level; import java.util.logging.Level;
import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.ProxyServer;
import org.yaml.snakeyaml.Yaml;
/** /**
* Class to manage bridging between plugin duties and implementation duties, for * Class to manage bridging between plugin duties and implementation duties, for
@ -22,6 +23,7 @@ import net.md_5.bungee.api.ProxyServer;
public class PluginManager public class PluginManager
{ {
private final Yaml yaml = new Yaml();
private final EventBus eventBus = new EventBus(); private final EventBus eventBus = new EventBus();
private final Map<String, Plugin> plugins = new HashMap<>(); private final Map<String, Plugin> plugins = new HashMap<>();
@ -63,7 +65,7 @@ public class PluginManager
JarEntry pdf = jar.getJarEntry("plugin.yml"); JarEntry pdf = jar.getJarEntry("plugin.yml");
try (InputStream in = jar.getInputStream(pdf)) try (InputStream in = jar.getInputStream(pdf))
{ {
PluginDescription desc = ProxyServer.getInstance().getYaml().loadAs(in, PluginDescription.class); PluginDescription desc = yaml.loadAs(in, PluginDescription.class);
URLClassLoader loader = new URLClassLoader(new URL[] URLClassLoader loader = new URLClassLoader(new URL[]
{ {
file.toURI().toURL() file.toURI().toURL()

View File

@ -10,7 +10,7 @@
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-parent</artifactId> <artifactId>bungeecord-parent</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.4.7-SNAPSHOT</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>BungeeCord</name> <name>BungeeCord</name>

View File

@ -6,24 +6,19 @@
<parent> <parent>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-parent</artifactId> <artifactId>bungeecord-parent</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.4.7-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath> <relativePath>../pom.xml</relativePath>
</parent> </parent>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>bungeecord-proxy</artifactId> <artifactId>bungeecord-proxy</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.4.7-SNAPSHOT</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>BungeeCord-Proxy</name> <name>BungeeCord-Proxy</name>
<description>Proxy component of the Elastic Portal Suite</description> <description>Proxy component of the Elastic Portal Suite</description>
<dependencies> <dependencies>
<dependency>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>2.0.1</version>
</dependency>
<dependency> <dependency>
<groupId>net.md-5</groupId> <groupId>net.md-5</groupId>
<artifactId>mendax</artifactId> <artifactId>mendax</artifactId>
@ -36,7 +31,7 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.bouncycastle</groupId> <groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId> <artifactId>bcprov-jdk15on</artifactId>
<version>1.47</version> <version>1.47</version>
</dependency> </dependency>
</dependencies> </dependencies>
@ -81,41 +76,9 @@
</excludes> </excludes>
</filter> </filter>
</filters> </filters>
<minimizeJar>true</minimizeJar>
</configuration> </configuration>
</plugin> </plugin>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<addMavenDescriptor>true</addMavenDescriptor>
<includeDependency>false</includeDependency>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
</libs>
<obfuscate>false</obfuscate>
<options>
<option>-dontoptimize</option>
<option>-keep class net.md_5.bungee.** { *; }</option>
</options>
</configuration>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>4.8</version>
</dependency>
</dependencies>
</plugin>
</plugins> </plugins>
</build> </build>
</project> </project>