SubServers-2/SubServers.Sync/src/net/ME1312/SubServers/Sync/Network/API/Host.java
ME1312 bc5acab41d
Replace Auto-Restart and Temporary Flags with Stop Actions
Stop Actions will is the replacement for both the Auto Restart and Temporary flags. To define that the server should restart on stop, use the RESTART keyword. To get the same result that you would get using the temporary flag, use the REMOVE_SERVER keyword.

Additionally, there is now a DELETE_SERVER keyword. This keyword does the same thing as the REMOVE_SERVER keyword, except it deletes the directory on the server ran from.

If you would like nothing special to happen when the server stops, use the NONE keyword.
2018-08-29 21:55:59 -04:00

299 lines
7.1 KiB
Java

package net.ME1312.SubServers.Sync.Network.API;
import net.ME1312.SubServers.Sync.Library.Config.YAMLSection;
import net.ME1312.SubServers.Sync.Library.Config.YAMLValue;
import net.ME1312.SubServers.Sync.Library.Util;
import net.ME1312.SubServers.Sync.Network.Packet.PacketDownloadHostInfo;
import net.ME1312.SubServers.Sync.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();
}
}