Skip to content

Commit

Permalink
Flesh out the Proxy API
Browse files Browse the repository at this point in the history
- Proxies connected to Redis are downloaded on startup/reload
- Named proxies are no longer removed on disconnect
- Proxies now show up in `/sub list`
- Proxies now have Add/Remove events in the API
- Proxies are included in the response of the `DownloadServerList` packet
  • Loading branch information
ME1312 committed Aug 5, 2018
1 parent b8ee251 commit 4aa9439
Show file tree
Hide file tree
Showing 44 changed files with 988 additions and 295 deletions.
@@ -0,0 +1,30 @@
package net.ME1312.SubServers.Bungee.Event;

import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.md_5.bungee.api.plugin.Event;

/**
* Proxy Add Event
*/
public class SubAddProxyEvent extends Event implements SubEvent {
private Proxy proxy;

/**
* Proxy Add Event
*
* @param proxy Host Being Added
*/
public SubAddProxyEvent(Proxy proxy) {
if (Util.isNull(proxy)) throw new NullPointerException();
this.proxy = proxy;
}

/**
* Gets the Proxy to be Added
*
* @return The Proxy to be Added
*/
public Proxy getProxy() { return proxy; }
}
@@ -0,0 +1,61 @@
package net.ME1312.SubServers.Bungee.Event;

import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.md_5.bungee.api.plugin.Cancellable;
import net.md_5.bungee.api.plugin.Event;

import java.net.InetAddress;

/**
* SubData Network Connect Event
*/
public class SubNetworkConnectEvent extends Event implements SubEvent, Cancellable {
private boolean cancelled = false;
private SubDataServer network;
private InetAddress address;

/**
* SubData Network Connect Event
*/
public SubNetworkConnectEvent(SubDataServer network, InetAddress address) {
if (Util.isNull(network, address)) throw new NullPointerException();
this.network = network;
this.address = address;
}

/**
* Get the network the client is trying to connect to
*
* @return SubData Network
*/
public SubDataServer getNetwork() {
return network;
}

/**
* Get the address of the connecting client
*
* @return Client address
*/
public InetAddress getAddress() {
return address;
}

/**
* Gets the Cancelled Status
*
* @return Cancelled Status
*/
public boolean isCancelled() {
return cancelled;
}

/**
* Sets the Cancelled Status
*/
public void setCancelled(boolean value) {
cancelled = value;
}
}
@@ -0,0 +1,43 @@
package net.ME1312.SubServers.Bungee.Event;

import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.ME1312.SubServers.Bungee.Network.Client;
import net.ME1312.SubServers.Bungee.Network.SubDataServer;
import net.md_5.bungee.api.plugin.Event;

/**
* SubData Network Disconnect Event
*/
public class SubNetworkDisconnectEvent extends Event implements SubEvent {
private SubDataServer network;
private Client client;

/**
* SubData Network Disconnect Event
*/
public SubNetworkDisconnectEvent(SubDataServer network, Client client) {
if (Util.isNull(network, client)) throw new NullPointerException();
this.network = network;
this.client = client;
}

/**
* Get the network the client is disconnecting from
*
* @return SubData Network
*/
public SubDataServer getNetwork() {
return network;
}

/**
* Get the disconnecting client
*
* @return Client
*/
public Client getClient() {
return client;
}

}
Expand Up @@ -10,15 +10,15 @@
import java.util.UUID;

/**
* Server Remove Event
* Host Remove Event
*/
public class SubRemoveHostEvent extends Event implements SubEvent, Cancellable {
private boolean cancelled = false;
private UUID player;
private Host host;

/**
* Server Remove Event
* Host Remove Event
*
* @param player Player Adding Server
* @param host Host to be added
Expand Down
@@ -0,0 +1,30 @@
package net.ME1312.SubServers.Bungee.Event;

import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Library.SubEvent;
import net.ME1312.SubServers.Bungee.Library.Util;
import net.md_5.bungee.api.plugin.Event;

/**
* Proxy Remove Event
*/
public class SubRemoveProxyEvent extends Event implements SubEvent {
private Proxy proxy;

/**
* Proxy Remove Event
*
* @param proxy Host Being Added
*/
public SubRemoveProxyEvent(Proxy proxy) {
if (Util.isNull(proxy)) throw new NullPointerException();
this.proxy = proxy;
}

/**
* Gets the Proxy to be Removed
*
* @return The Proxy to be Removed
*/
public Proxy getProxy() { return proxy; }
}
18 changes: 13 additions & 5 deletions SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Proxy.java
@@ -1,5 +1,6 @@
package net.ME1312.SubServers.Bungee.Host;

import net.ME1312.SubServers.Bungee.Event.SubRemoveProxyEvent;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLValue;
import net.ME1312.SubServers.Bungee.Library.ExtraDataHandler;
Expand All @@ -9,6 +10,7 @@
import net.ME1312.SubServers.Bungee.Network.ClientHandler;
import net.ME1312.SubServers.Bungee.SubAPI;
import net.ME1312.SubServers.Bungee.SubPlugin;
import net.md_5.bungee.api.ProxyServer;

import java.util.*;

Expand All @@ -18,12 +20,17 @@
public class Proxy implements ClientHandler, ExtraDataHandler {
private YAMLSection extra = new YAMLSection();
private final String signature;
private boolean persistent = true;
private Client client = null;
private String nick = null;
private final String name;

@SuppressWarnings("deprecation")
public Proxy(String name) throws IllegalArgumentException {
if (Util.isNull(name)) throw new NullPointerException();
if (name == null) {
name = Util.getNew(SubAPI.getInstance().getInternals().proxies.keySet(), () -> UUID.randomUUID().toString());
persistent = false;
}
if (name.contains(" ")) throw new IllegalArgumentException("Proxy names cannot have spaces: " + name);
this.name = name;
this.signature = SubAPI.getInstance().signAnonymousObject();
Expand All @@ -38,7 +45,10 @@ public Client getSubData() {
@SuppressWarnings("deprecation")
public void setSubData(Client client) {
this.client = client;
if (client == null) SubAPI.getInstance().getInternals().proxies.remove(getName().toLowerCase());
if (client == null && !persistent) {
ProxyServer.getInstance().getPluginManager().callEvent(new SubRemoveProxyEvent(this));
SubAPI.getInstance().getInternals().proxies.remove(getName().toLowerCase());
}
if (client != null && (client.getHandler() == null || !equals(client.getHandler()))) client.setHandler(this);
}

Expand Down Expand Up @@ -86,9 +96,7 @@ public Collection<NamedContainer<String, UUID>> getPlayers() {
try {
for (UUID player : (Set<UUID>) plugin.redis("getPlayersOnProxy", new NamedContainer<>(String.class, getName())))
players.add(new NamedContainer<>((String) plugin.redis("getNameFromUuid", new NamedContainer<>(UUID.class, player)), player));
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {}
}
return players;
}
Expand Down
Expand Up @@ -95,9 +95,7 @@ public Collection<NamedContainer<String, UUID>> getGlobalPlayers() {
if (plugin.redis) {
try {
for (UUID player : (Set<UUID>) plugin.redis("getPlayersOnServer", new NamedContainer<>(String.class, getName()))) players.add(new NamedContainer<>((String) plugin.redis("getNameFromUuid", new NamedContainer<>(UUID.class, player)), player));
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {}
} else {
for (ProxiedPlayer player : getPlayers()) players.add(new NamedContainer<>(player.getName(), player.getUniqueId()));
}
Expand Down
@@ -1,4 +1,4 @@
Version: '2.13a+'
Version: '2.13b+'
Lang:
'Bungee.Server.Current': '&6You are currently connected to $str$'
'Bungee.Server.Available': '&6You may connect to the following servers at this time:'
Expand Down Expand Up @@ -36,6 +36,7 @@ Lang:
'Command.List.Group-Header': '&7SubServers &8&l\u00BB&7 Group/Server List:'
'Command.List.Host-Header': '&7SubServers &8&l\u00BB&7 Host/SubServer List:'
'Command.List.Server-Header': '&7SubServers &8&l\u00BB&7 Server List:'
'Command.List.Proxy-Header': '&7SubServers &8&l\u00BB&7 Proxy List:'
'Command.List.Header': '&7: '
'Command.List.Divider': '&7, '
'Command.List.Empty': '&7(none)'
Expand Down
Expand Up @@ -43,13 +43,14 @@ public YAMLSection generate() {
YAMLSection data = new YAMLSection();
if (id != null) data.set("id", id);
YAMLSection subservers = new YAMLSection();
subservers.set("version", plugin.version.toString());
subservers.set("version", plugin.api.getWrapperVersion().toString());
if (plugin.api.getWrapperBuild() != null) subservers.set("build", plugin.api.getWrapperBuild().toString());
subservers.set("last-reload", plugin.resetDate);
subservers.set("hosts", plugin.api.getHosts().size());
subservers.set("subservers", plugin.api.getSubServers().size());
data.set("subservers", subservers);
YAMLSection bungee = new YAMLSection();
bungee.set("version", plugin.api.getProxyVersion());
bungee.set("version", plugin.api.getProxyVersion().toString());
bungee.set("disabled-cmds", plugin.getConfig().getDisabledCommands());
bungee.set("player-limit", plugin.getConfig().getPlayerLimit());
bungee.set("servers", plugin.api.getServers().size());
Expand All @@ -60,14 +61,14 @@ public YAMLSection generate() {
listener.set("motd", info.getMotd());
listener.set("priorities", info.getServerPriority());
listener.set("player-limit", info.getMaxPlayers());
listener.set("tab-list", info.getTabListType());
listener.set("tab-list-size", info.getTabListSize());
listeners.add(listener);
}
bungee.set("listeners", listeners);
data.set("bungee", bungee);
YAMLSection minecraft = new YAMLSection();
minecraft.set("version", Arrays.asList(plugin.api.getGameVersion()));
LinkedList<String> mcversions = new LinkedList<String>();
for (Version version : plugin.api.getGameVersion()) mcversions.add(version.toString());
minecraft.set("version", mcversions);
minecraft.set("players", plugin.api.getGlobalPlayers().size());
data.set("minecraft", minecraft);
YAMLSection system = new YAMLSection();
Expand Down
Expand Up @@ -2,6 +2,7 @@

import com.google.gson.Gson;
import net.ME1312.SubServers.Bungee.Host.Host;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Host.Server;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
Expand Down Expand Up @@ -54,6 +55,12 @@ public YAMLSection generate() {
YAMLSection data = new YAMLSection();
data.set("id", id);

YAMLSection proxies = new YAMLSection();
for (Proxy proxy : plugin.proxies.values()) {
proxies.set(proxy.getName(), new YAMLSection(new Gson().fromJson(proxy.toString(), Map.class)));
}
data.set("proxies", proxies);

YAMLSection exServers = new YAMLSection();
for (Server server : plugin.exServers.values()) {
exServers.set(server.getName(), new YAMLSection(new Gson().fromJson(server.toString(), Map.class)));
Expand Down
@@ -1,5 +1,6 @@
package net.ME1312.SubServers.Bungee.Network.Packet;

import net.ME1312.SubServers.Bungee.Event.SubAddProxyEvent;
import net.ME1312.SubServers.Bungee.Host.Proxy;
import net.ME1312.SubServers.Bungee.Library.Config.YAMLSection;
import net.ME1312.SubServers.Bungee.Library.Util;
Expand Down Expand Up @@ -58,8 +59,15 @@ public YAMLSection generate() {
public void execute(Client client, YAMLSection data) {
try {
Map<String, Proxy> proxies = plugin.api.getProxies();
Proxy proxy = new Proxy((data.contains("name") && !proxies.keySet().contains(data.getRawString("name").toLowerCase()))?data.getRawString("name"):Util.getNew(proxies.keySet(), () -> UUID.randomUUID().toString()));
plugin.proxies.put(proxy.getName().toLowerCase(), proxy);
Proxy proxy;
if (data.contains("name") && proxies.keySet().contains(data.getRawString("name").toLowerCase()) && proxies.get(data.getRawString("name").toLowerCase()).getSubData() == null) {
proxy = proxies.get(data.getRawString("name").toLowerCase());
} else {
proxy = new Proxy((data.contains("name") && !proxies.keySet().contains(data.getRawString("name").toLowerCase()))?data.getRawString("name"):null);
plugin.getPluginManager().callEvent(new SubAddProxyEvent(proxy));
plugin.proxies.put(proxy.getName().toLowerCase(), proxy);
}

client.setHandler(proxy);
System.out.println("SubData > " + client.getAddress().toString() + " has been defined as Proxy: " + proxy.getName());
client.sendPacket(new PacketLinkProxy(proxy.getName(), 0, "Definition Successful"));
Expand Down
Expand Up @@ -53,6 +53,13 @@ public Version getVersion() {
return new Version("2.11.0a");
}

@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubAddProxyEvent event) {
YAMLSection args = new YAMLSection();
args.set("proxy", event.getProxy().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
}

@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubAddHostEvent event) {
if (!event.isCancelled()) {
Expand Down Expand Up @@ -158,4 +165,11 @@ public void event(SubRemoveHostEvent event) {
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
}
}

@EventHandler(priority = Byte.MAX_VALUE)
public void event(SubRemoveProxyEvent event) {
YAMLSection args = new YAMLSection();
args.set("proxy", event.getProxy().getName());
plugin.subdata.broadcastPacket(new PacketOutRunEvent(event.getClass(), args));
}
}

0 comments on commit 4aa9439

Please sign in to comment.