Skip to content

Commit

Permalink
Implement a simalar namespaced key system in subdata
Browse files Browse the repository at this point in the history
This was a change I made to the Lang API a while back, and now it has made it's way into SubData.

Packets are now tied to channels (`n`) and then handles (`h`) within those channels.
  • Loading branch information
ME1312 committed Jul 29, 2018
1 parent 98ac267 commit 97c73bf
Show file tree
Hide file tree
Showing 22 changed files with 461 additions and 386 deletions.

Large diffs are not rendered by default.

Expand Up @@ -659,6 +659,15 @@ public Version getWrapperVersion() {
return plugin.version;
}

/**
* Gets the SubServers Build Signature
*
* @return SubServers Build Signature (or null if unsigned)
*/
public Version getWrapperBuild() {
return (SubPlugin.class.getPackage().getSpecificationTitle() != null)?new Version(SubPlugin.class.getPackage().getSpecificationTitle()):null;
}

/**
* Gets the BungeeCord Version
*
Expand Down
16 changes: 5 additions & 11 deletions SubServers.Bungee/src/net/ME1312/SubServers/Bungee/SubCommand.java
Expand Up @@ -71,28 +71,22 @@ public void execute(CommandSender sender, String[] args) {
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
sender.sendMessages(printHelp());
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
boolean build = false;
try {
Field f = Version.class.getDeclaredField("type");
f.setAccessible(true);
build = f.get(plugin.version) != VersionType.SNAPSHOT && SubPlugin.class.getPackage().getSpecificationTitle() != null;
f.setAccessible(false);
} catch (Exception e) {}

sender.sendMessage("SubServers > These are the platforms and versions that are running SubServers.Bungee:");
sender.sendMessage(" " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ',');
sender.sendMessage(" Java " + System.getProperty("java.version") + ',');
sender.sendMessage(" " + plugin.getBungeeName() + ((plugin.isPatched)?" [Patched] ":" ") + net.md_5.bungee.Bootstrap.class.getPackage().getImplementationVersion() + ',');
sender.sendMessage(" SubServers.Bungee v" + SubPlugin.version.toExtendedString() + ((build)?" (" + SubPlugin.class.getPackage().getSpecificationTitle() + ')':""));
sender.sendMessage(" SubServers.Bungee v" + SubPlugin.version.toExtendedString() + ((plugin.api.getWrapperBuild() != null)?" (" + plugin.api.getWrapperBuild() + ')':""));
sender.sendMessage("");
new Thread(() -> {
try {
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
List<Version> versions = new LinkedList<Version>();

Version updversion = plugin.version;
int updcount = 0;
for (YAMLSection tag : tags.getSectionList("tags")) {
Version version = Version.fromString(tag.getString("ref").substring(10));
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
Collections.sort(versions);
for (Version version : versions) {
if (version.compareTo(updversion) > 0) {
updversion = version;
updcount++;
Expand Down
Expand Up @@ -58,8 +58,7 @@ public final class SubPlugin extends BungeeCord implements Listener {
public final SubAPI api = new SubAPI(this);
public SubDataServer subdata = null;
public SubServer sudo = null;
//public static final Version version = Version.fromString("2.13b");
public static final Version version = new Version(Version.fromString("2.13b"), VersionType.SNAPSHOT, (SubPlugin.class.getPackage().getSpecificationTitle() == null)?"custom":SubPlugin.class.getPackage().getSpecificationTitle()); // TODO Snapshot Version
public static final Version version = Version.fromString("2.13b");

public boolean redis = false;
public boolean canSudo = false;
Expand Down
Expand Up @@ -27,8 +27,8 @@
* SubData Direct Client Class
*/
public final class SubDataClient {
private static HashMap<Class<? extends PacketOut>, String> pOut = new HashMap<Class<? extends PacketOut>, String>();
private static HashMap<String, List<PacketIn>> pIn = new HashMap<String, List<PacketIn>>();
private static HashMap<Class<? extends PacketOut>, NamedContainer<String, String>> pOut = new HashMap<Class<? extends PacketOut>, NamedContainer<String, String>>();
private static HashMap<String, HashMap<String, List<PacketIn>>> pIn = new HashMap<String, HashMap<String, List<PacketIn>>>();
private static HashMap<String, Cipher> ciphers = new HashMap<String, Cipher>();
private static boolean defaults = false;
private PrintWriter writer;
Expand Down Expand Up @@ -95,36 +95,36 @@ private void init() {
} private void loadDefaults() {
defaults = true;

registerPacket(new PacketAuthorization(plugin), "Authorization");
registerPacket(new PacketCommandServer(), "SubCommandServer");
registerPacket(new PacketCreateServer(), "SubCreateServer");
registerPacket(new PacketDownloadHostInfo(), "SubDownloadHostInfo");
registerPacket(new PacketDownloadLang(plugin), "SubDownloadLang");
registerPacket(new PacketDownloadNetworkList(), "SubDownloadNetworkList");
registerPacket(new PacketDownloadPlayerList(), "SubDownloadPlayerList");
registerPacket(new PacketDownloadProxyInfo(), "SubDownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubDownloadServerInfo");
registerPacket(new PacketDownloadServerList(), "SubDownloadServerList");
registerPacket(new PacketInRunEvent(plugin), "SubRunEvent");
registerPacket(new PacketInReload(plugin), "SubReload");
registerPacket(new PacketInReset(), "SubReset");
registerPacket(new PacketLinkServer(plugin), "SubLinkServer");
registerPacket(new PacketStartServer(), "SubStartServer");
registerPacket(new PacketStopServer(), "SubStopServer");

registerPacket(PacketAuthorization.class, "Authorization");
registerPacket(PacketCommandServer.class, "SubCommandServer");
registerPacket(PacketCreateServer.class, "SubCreateServer");
registerPacket(PacketDownloadHostInfo.class, "SubDownloadHostInfo");
registerPacket(PacketDownloadLang.class, "SubDownloadLang");
registerPacket(PacketDownloadNetworkList.class, "SubDownloadNetworkList");
registerPacket(PacketDownloadPlayerList.class, "SubDownloadPlayerList");
registerPacket(PacketDownloadProxyInfo.class, "SubDownloadProxyInfo");
registerPacket(PacketDownloadServerInfo.class, "SubDownloadServerInfo");
registerPacket(PacketDownloadServerList.class, "SubDownloadServerList");
registerPacket(PacketLinkServer.class, "SubLinkServer");
registerPacket(PacketStartServer.class, "SubStartServer");
registerPacket(PacketStopServer.class, "SubStopServer");
registerPacket(new PacketAuthorization(plugin), "SubData", "Authorization");
registerPacket(new PacketCommandServer(), "SubServers", "CommandServer");
registerPacket(new PacketCreateServer(), "SubServers", "CreateServer");
registerPacket(new PacketDownloadHostInfo(), "SubServers", "DownloadHostInfo");
registerPacket(new PacketDownloadLang(plugin), "SubServers", "DownloadLang");
registerPacket(new PacketDownloadNetworkList(), "SubServers", "DownloadNetworkList");
registerPacket(new PacketDownloadPlayerList(), "SubServers", "DownloadPlayerList");
registerPacket(new PacketDownloadProxyInfo(), "SubServers", "DownloadProxyInfo");
registerPacket(new PacketDownloadServerInfo(), "SubServers", "DownloadServerInfo");
registerPacket(new PacketDownloadServerList(), "SubServers", "DownloadServerList");
registerPacket(new PacketInRunEvent(plugin), "SubServers", "RunEvent");
registerPacket(new PacketInReload(plugin), "SubServers", "Reload");
registerPacket(new PacketInReset(), "SubServers", "Reset");
registerPacket(new PacketLinkServer(plugin), "SubServers", "LinkServer");
registerPacket(new PacketStartServer(), "SubServers", "StartServer");
registerPacket(new PacketStopServer(), "SubServers", "StopServer");

registerPacket(PacketAuthorization.class, "SubData", "Authorization");
registerPacket(PacketCommandServer.class, "SubServers", "CommandServer");
registerPacket(PacketCreateServer.class, "SubServers", "CreateServer");
registerPacket(PacketDownloadHostInfo.class, "SubServers", "DownloadHostInfo");
registerPacket(PacketDownloadLang.class, "SubServers", "DownloadLang");
registerPacket(PacketDownloadNetworkList.class, "SubServers", "DownloadNetworkList");
registerPacket(PacketDownloadPlayerList.class, "SubServers", "DownloadPlayerList");
registerPacket(PacketDownloadProxyInfo.class, "SubServers", "DownloadProxyInfo");
registerPacket(PacketDownloadServerInfo.class, "SubServers", "DownloadServerInfo");
registerPacket(PacketDownloadServerList.class, "SubServers", "DownloadServerList");
registerPacket(PacketLinkServer.class, "SubServers", "LinkServer");
registerPacket(PacketStartServer.class, "SubServers", "StartServer");
registerPacket(PacketStopServer.class, "SubServers", "StopServer");
}

private void loop() {
Expand Down Expand Up @@ -230,33 +230,40 @@ public static Cipher getCipher(String handle) {
* Register PacketIn to the Network
*
* @param packet PacketIn to register
* @param channel Packet Channel
* @param handle Handle to Bind
*/
public static void registerPacket(PacketIn packet, String handle) {
public static void registerPacket(PacketIn packet, String channel, String handle) {
if (Util.isNull(packet, handle)) throw new NullPointerException();
List<PacketIn> list = (pIn.keySet().contains(handle.toLowerCase()))?pIn.get(handle.toLowerCase()):new ArrayList<PacketIn>();
HashMap<String, List<PacketIn>> map = (pIn.keySet().contains(channel.toLowerCase()))?pIn.get(channel.toLowerCase()):new HashMap<String, List<PacketIn>>();
List<PacketIn> list = (map.keySet().contains(handle))?map.get(handle):new ArrayList<PacketIn>();
if (!list.contains(packet)) {
list.add(packet);
pIn.put(handle.toLowerCase(), list);
map.put(handle, list);
pIn.put(channel.toLowerCase(), map);
}
}

/**
* Unregister PacketIn from the Network
*
* @param channel Packet Channel
* @param packet PacketIn to unregister
*/
public static void unregisterPacket(PacketIn packet) {
public static void unregisterPacket(String channel, PacketIn packet) {
if (Util.isNull(packet)) throw new NullPointerException();
List<String> search = new ArrayList<String>();
search.addAll(pIn.keySet());
for (String handle : search) if (pIn.get(handle.toLowerCase()).contains(packet)) {
List<PacketIn> list = pIn.get(handle.toLowerCase());
list.remove(packet);
if (list.isEmpty()) {
pIn.remove(handle.toLowerCase());
} else {
pIn.put(handle.toLowerCase(), list);
if (pIn.keySet().contains(channel.toLowerCase())) {
List<String> search = new ArrayList<String>();
search.addAll(pIn.get(channel.toLowerCase()).keySet());
for (String handle : search) if (pIn.get(channel.toLowerCase()).get(handle).contains(packet)) {
List<PacketIn> list = pIn.get(channel.toLowerCase()).get(handle);
list.remove(packet);
if (list.isEmpty()) {
pIn.get(channel.toLowerCase()).remove(handle);
if (pIn.get(channel.toLowerCase()).isEmpty()) pIn.remove(channel.toLowerCase());
} else {
pIn.get(channel.toLowerCase()).put(handle, list);
}
}
}
}
Expand All @@ -265,32 +272,35 @@ public static void unregisterPacket(PacketIn packet) {
* Register PacketOut to the Network
*
* @param packet PacketOut to register
* @param channel Packet Channel
* @param handle Handle to bind
*/
public static void registerPacket(Class<? extends PacketOut> packet, String handle) {
public static void registerPacket(Class<? extends PacketOut> packet, String channel, String handle) {
if (Util.isNull(packet, handle)) throw new NullPointerException();
pOut.put(packet, handle.toLowerCase());
pOut.put(packet, new NamedContainer<String, String>(channel.toLowerCase(), handle));
}

/**
* Unregister PacketOut to the Network
*
* @param channel Packet Channel
* @param packet PacketOut to unregister
*/
public static void unregisterPacket(Class<? extends PacketOut> packet) {
public static void unregisterPacket(String channel, Class<? extends PacketOut> packet) {
if (Util.isNull(packet)) throw new NullPointerException();
pOut.remove(packet);
if (pOut.keySet().contains(packet) && pOut.get(packet).name().equalsIgnoreCase(channel)) pOut.remove(packet);
}

/**
* Grab PacketIn Instances via handle
*
* @param channel Packet Channel
* @param handle Handle
* @return PacketIn
*/
public static List<? extends PacketIn> getPacket(String handle) {
public static List<? extends PacketIn> getPacket(String channel, String handle) {
if (Util.isNull(handle)) throw new NullPointerException();
return new ArrayList<PacketIn>(pIn.get(handle.toLowerCase()));
return new ArrayList<PacketIn>(pIn.get(channel.toLowerCase()).get(handle));
}

/**
Expand Down Expand Up @@ -356,7 +366,8 @@ private static YAMLSection encodePacket(PacketOut packet) throws IllegalPacketEx

try {
YAMLSection contents = packet.generate();
data.set("h", pOut.get(packet.getClass()));
data.set("n", pOut.get(packet.getClass()).name());
data.set("h", pOut.get(packet.getClass()).get());
data.set("v", packet.getVersion().toString());
if (contents != null) data.set("c", contents);
return data;
Expand All @@ -374,11 +385,11 @@ private static YAMLSection encodePacket(PacketOut packet) throws IllegalPacketEx
* @throws InvocationTargetException
*/
private static List<PacketIn> decodePacket(YAMLSection data) throws IllegalPacketException, InvocationTargetException {
if (!data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
if (!pIn.keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("h"));
if (!data.contains("n") || !data.contains("h") || !data.contains("v")) throw new IllegalPacketException("Unknown Packet Format: " + data.toString());
if (!pIn.keySet().contains(data.getRawString("n")) || !pIn.get(data.getRawString("n")).keySet().contains(data.getRawString("h"))) throw new IllegalPacketException("Unknown PacketIn Channel: " + data.getRawString("n") + ':' + data.getRawString("h"));

List<PacketIn> list = new ArrayList<PacketIn>();
for (PacketIn packet : pIn.get(data.getRawString("h"))) {
for (PacketIn packet : pIn.get(data.getRawString("n")).get(data.getRawString("h"))) {
if (packet.isCompatible(new Version(data.getRawString("v")))) {
list.add(packet);
} else {
Expand Down
Expand Up @@ -353,6 +353,15 @@ public Version getPluginVersion() {
return plugin.version;
}

/**
* Gets the SubServers Build Signature
*
* @return SubServers Build Signature (or null if unsigned)
*/
public Version getPluginBuild() {
return (SubPlugin.class.getPackage().getSpecificationTitle() != null)?new Version(SubPlugin.class.getPackage().getSpecificationTitle()):null;
}

/**
* Gets the Server Version
*
Expand Down
Expand Up @@ -53,28 +53,22 @@ public boolean onCommand(CommandSender sender, Command command, String label, St
if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
sender.sendMessage(printHelp(label));
} else if (args[0].equalsIgnoreCase("version") || args[0].equalsIgnoreCase("ver")) {
boolean build = false;
try {
Field f = Version.class.getDeclaredField("type");
f.setAccessible(true);
build = f.get(plugin.version) != VersionType.SNAPSHOT && SubPlugin.class.getPackage().getSpecificationTitle() != null;
f.setAccessible(false);
} catch (Exception e) {}

sender.sendMessage(plugin.api.getLang("SubServers", "Command.Version").replace("$str$", "SubServers.Client.Bukkit"));
sender.sendMessage(ChatColor.WHITE + " " + System.getProperty("os.name") + ' ' + System.getProperty("os.version") + ChatColor.RESET + ',');
sender.sendMessage(ChatColor.WHITE + " Java " + System.getProperty("java.version") + ChatColor.RESET + ',');
sender.sendMessage(ChatColor.WHITE + " " + Bukkit.getName() + ' ' + Bukkit.getVersion() + ChatColor.RESET + ',');
sender.sendMessage(ChatColor.WHITE + " SubServers.Client.Bukkit v" + plugin.version.toExtendedString() + ((build)?" (" + SubPlugin.class.getPackage().getSpecificationTitle() + ')':""));
sender.sendMessage(ChatColor.WHITE + " SubServers.Client.Bukkit v" + plugin.version.toExtendedString() + ((plugin.api.getPluginBuild() != null)?" (" + plugin.api.getPluginBuild() + ')':""));
sender.sendMessage("");
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
try {
YAMLSection tags = new YAMLSection(new Gson().fromJson("{\"tags\":" + Util.readAll(new BufferedReader(new InputStreamReader(new URL("https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags").openStream(), Charset.forName("UTF-8")))) + '}', Map.class));
List<Version> versions = new LinkedList<Version>();

Version updversion = plugin.version;
int updcount = 0;
for (YAMLSection tag : tags.getSectionList("tags")) {
Version version = Version.fromString(tag.getString("ref").substring(10));
for (YAMLSection tag : tags.getSectionList("tags")) versions.add(Version.fromString(tag.getString("ref").substring(10)));
Collections.sort(versions);
for (Version version : versions) {
if (version.compareTo(updversion) > 0) {
updversion = version;
updcount++;
Expand Down

0 comments on commit 97c73bf

Please sign in to comment.