mirror of
https://github.com/ME1312/SubServers-2.git
synced 2024-06-23 05:04:57 +02:00
299 lines
7.1 KiB
Java
299 lines
7.1 KiB
Java
package net.ME1312.SubServers.Host.Network.API;
|
|
|
|
import net.ME1312.Galaxi.Library.Config.YAMLSection;
|
|
import net.ME1312.Galaxi.Library.Config.YAMLValue;
|
|
import net.ME1312.Galaxi.Library.Util;
|
|
import net.ME1312.SubServers.Host.Network.Packet.PacketDownloadHostInfo;
|
|
import net.ME1312.SubServers.Host.SubAPI;
|
|
|
|
import java.net.InetAddress;
|
|
import java.net.UnknownHostException;
|
|
import java.util.*;
|
|
|
|
public class Host {
|
|
HashMap<String, SubServer> servers = new HashMap<String, SubServer>();
|
|
private SubCreator creator;
|
|
YAMLSection raw;
|
|
long timestamp;
|
|
|
|
/**
|
|
* Create an API representation of a Host
|
|
*
|
|
* @param raw Raw representation of the Host
|
|
*/
|
|
public Host(YAMLSection raw) {
|
|
load(raw);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj) {
|
|
return obj instanceof Host && getSignature().equals(((Host) obj).getSignature());
|
|
}
|
|
|
|
private void load(YAMLSection raw) {
|
|
this.raw = raw;
|
|
this.timestamp = Calendar.getInstance().getTime().getTime();
|
|
|
|
servers.clear();
|
|
this.creator = new SubCreator(this, raw.getSection("creator"));
|
|
for (String server : raw.getSection("servers").getKeys()) {
|
|
servers.put(server.toLowerCase(), new SubServer(this, raw.getSection("servers").getSection(server)));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Download a new copy of the data from SubData
|
|
*/
|
|
public void refresh() {
|
|
String name = getName();
|
|
SubAPI.getInstance().getSubDataNetwork().sendPacket(new PacketDownloadHostInfo(name, data -> load(data.getSection("hosts").getSection(name))));
|
|
}
|
|
|
|
/**
|
|
* Gets the SubData Client Address
|
|
*
|
|
* @return SubData Client Address (or null if unlinked/unsupported)
|
|
*/
|
|
public String getSubData() {
|
|
return raw.getRawString("subdata", null);
|
|
}
|
|
|
|
/**
|
|
* Is this Host Available?
|
|
*
|
|
* @return Availability Status
|
|
*/
|
|
public boolean isAvailable() {
|
|
return raw.getBoolean("available");
|
|
}
|
|
|
|
/**
|
|
* Is this Host Enabled?
|
|
*
|
|
* @return Enabled Status
|
|
*/
|
|
public boolean isEnabled() {
|
|
return raw.getBoolean("enabled");
|
|
}
|
|
|
|
/**
|
|
* Get the Address of this Host
|
|
*
|
|
* @return Host Address
|
|
*/
|
|
public InetAddress getAddress() {
|
|
try {
|
|
return InetAddress.getByName(raw.getRawString("address"));
|
|
} catch (UnknownHostException e) {
|
|
throw new IllegalStateException("Invalid address response from raw data key: address");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the host Directory Path
|
|
*
|
|
* @return Host Directory Path
|
|
*/
|
|
public String getPath() {
|
|
return raw.getRawString("dir");
|
|
}
|
|
|
|
/**
|
|
* Get the Name of this Host
|
|
*
|
|
* @return Host Name
|
|
*/
|
|
public String getName() {
|
|
return raw.getRawString("name");
|
|
}
|
|
|
|
/**
|
|
* Get the Display Name of this Host
|
|
*
|
|
* @return Display Name
|
|
*/
|
|
public String getDisplayName() {
|
|
return raw.getRawString("display");
|
|
}
|
|
|
|
/**
|
|
* Starts the Servers Specified
|
|
*
|
|
* @param servers Servers
|
|
*/
|
|
public void start(String... servers) {
|
|
start(null, servers);
|
|
}
|
|
|
|
/**
|
|
* Starts the Servers Specified
|
|
*
|
|
* @param player Player who started
|
|
* @param servers Servers
|
|
*/
|
|
public void start(UUID player, String... servers) {
|
|
for (String server : servers) {
|
|
getSubServer(server.toLowerCase()).start(player);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stops the Servers Specified
|
|
*
|
|
* @param servers Servers
|
|
*/
|
|
public void stop(String... servers) {
|
|
stop(null, servers);
|
|
}
|
|
|
|
/**
|
|
* Stops the Servers Specified
|
|
*
|
|
* @param player Player who started
|
|
* @param servers Servers
|
|
*/
|
|
public void stop(UUID player, String... servers) {
|
|
for (String server : servers) {
|
|
getSubServer(server.toLowerCase()).stop(player);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Terminates the Servers Specified
|
|
*
|
|
* @param servers Servers
|
|
*/
|
|
public void terminate(String... servers) {
|
|
terminate(null, servers);
|
|
}
|
|
|
|
/**
|
|
* Terminates the Servers Specified
|
|
*
|
|
* @param player Player who started
|
|
* @param servers Servers
|
|
*/
|
|
public void terminate(UUID player, String... servers) {
|
|
for (String server : servers) {
|
|
getSubServer(server.toLowerCase()).terminate(player);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Commands the Servers Specified
|
|
*
|
|
* @param command Command to send
|
|
* @param servers Servers
|
|
*/
|
|
public void command(String command, String... servers) {
|
|
command(null, command, servers);
|
|
}
|
|
|
|
/**
|
|
* Commands the Servers Specified
|
|
*
|
|
* @param player Player who started
|
|
* @param command Command to send
|
|
* @param servers Servers
|
|
* @return Success Status
|
|
*/
|
|
public void command(UUID player, String command, String... servers) {
|
|
for (String server : servers) {
|
|
getSubServer(server.toLowerCase()).command(player, command);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Gets the SubCreator Instance for this Host
|
|
*
|
|
* @return SubCreator
|
|
*/
|
|
public SubCreator getCreator() {
|
|
return creator;
|
|
}
|
|
|
|
/**
|
|
* Gets the SubServers on this Host
|
|
*
|
|
* @return SubServer Map
|
|
*/
|
|
public Map<String, ? extends SubServer> getSubServers() {
|
|
return new TreeMap<String, SubServer>(servers);
|
|
}
|
|
|
|
/**
|
|
* Gets a SubServer
|
|
*
|
|
* @param name SubServer Name
|
|
* @return a SubServer
|
|
*/
|
|
public SubServer getSubServer(String name) {
|
|
if (Util.isNull(name)) throw new NullPointerException();
|
|
return getSubServers().get(name.toLowerCase());
|
|
}
|
|
|
|
/**
|
|
* Get the Signature of this Object
|
|
*
|
|
* @return Object Signature
|
|
*/
|
|
public final String getSignature() {
|
|
return raw.getRawString("signature");
|
|
}
|
|
|
|
/**
|
|
* Get the Timestamp for when the data was last refreshed
|
|
*
|
|
* @return Data Timestamp
|
|
*/
|
|
public long getTimestamp() {
|
|
return timestamp;
|
|
}
|
|
|
|
/**
|
|
* Determine if an extra value exists
|
|
*
|
|
* @param handle Handle
|
|
* @return Value Status
|
|
*/
|
|
public boolean hasExtra(String handle) {
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
|
return raw.getSection("extra").getKeys().contains(handle);
|
|
}
|
|
|
|
/**
|
|
* Get an extra value
|
|
*
|
|
* @param handle Handle
|
|
* @return Value
|
|
*/
|
|
public YAMLValue getExtra(String handle) {
|
|
if (Util.isNull(handle)) throw new NullPointerException();
|
|
return raw.getSection("extra").get(handle);
|
|
}
|
|
|
|
/**
|
|
* Get the extra value section
|
|
*
|
|
* @return Extra Value Section
|
|
*/
|
|
public YAMLSection getExtra() {
|
|
return raw.getSection("extra").clone();
|
|
}
|
|
|
|
/**
|
|
* Get the raw representation of the Host
|
|
*
|
|
* @return Raw Host
|
|
*/
|
|
public YAMLSection getRaw() {
|
|
return raw.clone();
|
|
}
|
|
|
|
@Override
|
|
@SuppressWarnings("unchecked")
|
|
public String toString() {
|
|
return raw.toJSON().toString();
|
|
}
|
|
}
|