forked from xjboss/KCauldronX
Finally fix #67
This commit is contained in:
@ -10,52 +10,52 @@ import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class CommandSenderUpdateCallback implements IVersionCheckCallback {
|
||||
private Reference<CommandSender> mSender;
|
||||
private Reference<CommandSender> mSender;
|
||||
|
||||
public CommandSenderUpdateCallback(CommandSender sender) {
|
||||
mSender = new WeakReference<CommandSender>(sender);
|
||||
}
|
||||
public CommandSenderUpdateCallback(CommandSender sender) {
|
||||
mSender = new WeakReference<CommandSender>(sender);
|
||||
}
|
||||
|
||||
protected CommandSender getSender() {
|
||||
return mSender.get();
|
||||
}
|
||||
protected CommandSender getSender() {
|
||||
return mSender.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void upToDate() {
|
||||
CommandSender sender = mSender.get();
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.GREEN
|
||||
+ "Running version of KCauldron is up-to-date: "
|
||||
+ KCauldron.getCurrentVersion());
|
||||
}
|
||||
DefaultUpdateCallback.INSTANCE.upToDate();
|
||||
}
|
||||
@Override
|
||||
public void upToDate() {
|
||||
CommandSender sender = mSender.get();
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.GREEN
|
||||
+ "Running version of KCauldron is up-to-date: "
|
||||
+ KCauldron.getCurrentVersion());
|
||||
}
|
||||
DefaultUpdateCallback.INSTANCE.upToDate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newVersion(String newVersion) {
|
||||
CommandSender sender = mSender.get();
|
||||
if (sender != null) {
|
||||
newVersion(sender, KCauldron.getCurrentVersion(), newVersion);
|
||||
}
|
||||
DefaultUpdateCallback.INSTANCE.newVersion(newVersion);
|
||||
}
|
||||
@Override
|
||||
public void newVersion(String newVersion) {
|
||||
CommandSender sender = mSender.get();
|
||||
if (sender != null) {
|
||||
newVersion(sender, KCauldron.getCurrentVersion(), newVersion);
|
||||
}
|
||||
DefaultUpdateCallback.INSTANCE.newVersion(newVersion);
|
||||
}
|
||||
|
||||
public static void newVersion(CommandSender sender, String currentVersion,
|
||||
String newVersion) {
|
||||
sender.sendMessage(new String[] {
|
||||
ChatColor.YELLOW + "Found new version of KCauldron: "
|
||||
+ newVersion,
|
||||
ChatColor.YELLOW + "Current is " + currentVersion,
|
||||
ChatColor.YELLOW + "Type '" + ChatColor.BLUE + "/kc update"
|
||||
+ ChatColor.YELLOW + "' to update" });
|
||||
}
|
||||
public static void newVersion(CommandSender sender, String currentVersion,
|
||||
String newVersion) {
|
||||
sender.sendMessage(new String[] {
|
||||
ChatColor.YELLOW + "Found new version of KCauldron: "
|
||||
+ newVersion,
|
||||
ChatColor.YELLOW + "Current is " + currentVersion,
|
||||
ChatColor.YELLOW + "Type '" + ChatColor.BLUE + "/kc update"
|
||||
+ ChatColor.YELLOW + "' to update" });
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
CommandSender sender = mSender.get();
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.RED
|
||||
+ "Error ocurred durring version check, see details in server log");
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
CommandSender sender = mSender.get();
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.RED
|
||||
+ "Error ocurred durring version check, see details in server log");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,66 +11,66 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
public class DefaultUpdateCallback implements IVersionCheckCallback {
|
||||
public static DefaultUpdateCallback INSTANCE;
|
||||
public static DefaultUpdateCallback INSTANCE;
|
||||
|
||||
static {
|
||||
INSTANCE = new DefaultUpdateCallback();
|
||||
}
|
||||
static {
|
||||
INSTANCE = new DefaultUpdateCallback();
|
||||
}
|
||||
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (mHasUpdate && hasPermission(player)) {
|
||||
sendUpdate(player);
|
||||
}
|
||||
}
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (mHasUpdate && hasPermission(player)) {
|
||||
sendUpdate(player);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasPermission(CommandSender player) {
|
||||
return player.hasPermission(KCauldronCommand.UPDATE);
|
||||
}
|
||||
private boolean hasPermission(CommandSender player) {
|
||||
return player.hasPermission(KCauldronCommand.UPDATE);
|
||||
}
|
||||
|
||||
private void sendUpdate(CommandSender player) {
|
||||
CommandSenderUpdateCallback.newVersion(player, mCurrentVersion,
|
||||
mNewVersion);
|
||||
}
|
||||
private void sendUpdate(CommandSender player) {
|
||||
CommandSenderUpdateCallback.newVersion(player, mCurrentVersion,
|
||||
mNewVersion);
|
||||
}
|
||||
|
||||
private boolean mHasUpdate;
|
||||
private String mCurrentVersion;
|
||||
private String mNewVersion;
|
||||
private boolean mHasUpdate;
|
||||
private String mCurrentVersion;
|
||||
private String mNewVersion;
|
||||
|
||||
private DefaultUpdateCallback() {
|
||||
}
|
||||
private DefaultUpdateCallback() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void upToDate() {
|
||||
mHasUpdate = false;
|
||||
mCurrentVersion = KCauldron.getCurrentVersion();
|
||||
mNewVersion = null;
|
||||
}
|
||||
@Override
|
||||
public void upToDate() {
|
||||
mHasUpdate = false;
|
||||
mCurrentVersion = KCauldron.getCurrentVersion();
|
||||
mNewVersion = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newVersion(String newVersion) {
|
||||
mCurrentVersion = KCauldron.getCurrentVersion();
|
||||
mNewVersion = newVersion;
|
||||
if (!mHasUpdate) {
|
||||
Bukkit.getConsoleSender().sendMessage(
|
||||
"New version of KCauldron avaiable: " + newVersion);
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (hasPermission(player)) {
|
||||
sendUpdate(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
mHasUpdate = true;
|
||||
if (MinecraftServer.kcauldronConfig.updatecheckerAutoinstall.getValue()
|
||||
&& !mNewVersion.equals(KCauldron.sNewServerVersion)
|
||||
&& !KCauldron.sUpdateInProgress) {
|
||||
Bukkit.getConsoleSender().sendMessage("Triggering auto update");
|
||||
KCauldronUpdater.initUpdate(Bukkit.getConsoleSender(), newVersion);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void newVersion(String newVersion) {
|
||||
mCurrentVersion = KCauldron.getCurrentVersion();
|
||||
mNewVersion = newVersion;
|
||||
if (!mHasUpdate) {
|
||||
Bukkit.getConsoleSender().sendMessage(
|
||||
"New version of KCauldron avaiable: " + newVersion);
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (hasPermission(player)) {
|
||||
sendUpdate(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
mHasUpdate = true;
|
||||
if (MinecraftServer.kcauldronConfig.updatecheckerAutoinstall.getValue()
|
||||
&& !mNewVersion.equals(KCauldron.sNewServerVersion)
|
||||
&& !KCauldron.sUpdateInProgress) {
|
||||
Bukkit.getConsoleSender().sendMessage("Triggering auto update");
|
||||
KCauldronUpdater.initUpdate(Bukkit.getConsoleSender(), newVersion);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -26,181 +26,181 @@ import org.bukkit.command.CommandSender;
|
||||
import com.google.common.base.Joiner;
|
||||
|
||||
public class KCauldronUpdater implements Runnable, IVersionCheckCallback {
|
||||
private static final class LatestVersionCallback extends
|
||||
CommandSenderUpdateCallback {
|
||||
public LatestVersionCallback(CommandSender sender) {
|
||||
super(sender);
|
||||
}
|
||||
private static final class LatestVersionCallback extends
|
||||
CommandSenderUpdateCallback {
|
||||
public LatestVersionCallback(CommandSender sender) {
|
||||
super(sender);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newVersion(String newVersion) {
|
||||
startUpdate(getSender(), newVersion);
|
||||
}
|
||||
@Override
|
||||
public void newVersion(String newVersion) {
|
||||
startUpdate(getSender(), newVersion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void upToDate() {
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
CommandSender sender = getSender();
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.DARK_PURPLE + "Current version ("
|
||||
+ KCauldron.getCurrentVersion() + ") is up to date");
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void upToDate() {
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
CommandSender sender = getSender();
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.DARK_PURPLE + "Current version ("
|
||||
+ KCauldron.getCurrentVersion() + ") is up to date");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
super.error(t);
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
super.error(t);
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void initUpdate(CommandSender sender, String version) {
|
||||
if (KCauldron.sUpdateInProgress) {
|
||||
sender.sendMessage(ChatColor.RED
|
||||
+ "Update stopped: another update in progress");
|
||||
return;
|
||||
}
|
||||
KCauldron.sUpdateInProgress = true;
|
||||
if (version == null) {
|
||||
sender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Fetching latest version...");
|
||||
KVersionRetriever.startServer(new LatestVersionCallback(sender),
|
||||
false);
|
||||
} else {
|
||||
startUpdate(sender, version);
|
||||
}
|
||||
}
|
||||
public static void initUpdate(CommandSender sender, String version) {
|
||||
if (KCauldron.sUpdateInProgress) {
|
||||
sender.sendMessage(ChatColor.RED
|
||||
+ "Update stopped: another update in progress");
|
||||
return;
|
||||
}
|
||||
KCauldron.sUpdateInProgress = true;
|
||||
if (version == null) {
|
||||
sender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Fetching latest version...");
|
||||
KVersionRetriever.startServer(new LatestVersionCallback(sender),
|
||||
false);
|
||||
} else {
|
||||
startUpdate(sender, version);
|
||||
}
|
||||
}
|
||||
|
||||
private static void startUpdate(CommandSender sender, String version) {
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.DARK_PURPLE + "Starting update to "
|
||||
+ version + "...");
|
||||
}
|
||||
new KCauldronUpdater(sender, version);
|
||||
}
|
||||
private static void startUpdate(CommandSender sender, String version) {
|
||||
if (sender != null) {
|
||||
sender.sendMessage(ChatColor.DARK_PURPLE + "Starting update to "
|
||||
+ version + "...");
|
||||
}
|
||||
new KCauldronUpdater(sender, version);
|
||||
}
|
||||
|
||||
private final CommandSender mSender;
|
||||
private final String mVersion;
|
||||
private final Thread mThread;
|
||||
private final CommandSender mSender;
|
||||
private final String mVersion;
|
||||
private final Thread mThread;
|
||||
|
||||
public KCauldronUpdater(CommandSender sender, String version) {
|
||||
mSender = sender;
|
||||
mVersion = version;
|
||||
mThread = new Thread(this);
|
||||
mThread.setName("KCauldron updater");
|
||||
mThread.setPriority(Thread.MIN_PRIORITY);
|
||||
mThread.start();
|
||||
}
|
||||
public KCauldronUpdater(CommandSender sender, String version) {
|
||||
mSender = sender;
|
||||
mVersion = version;
|
||||
mThread = new Thread(this);
|
||||
mThread.setName("KCauldron updater");
|
||||
mThread.setPriority(Thread.MIN_PRIORITY);
|
||||
mThread.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (!MinecraftServer.kcauldronConfig.updatecheckerQuite.getValue()) {
|
||||
mSender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Retrieving latest KBootstrap version...");
|
||||
}
|
||||
new KVersionRetriever(this, false, false, "pw.prok", "KBootstrap");
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
if (!MinecraftServer.kcauldronConfig.updatecheckerQuite.getValue()) {
|
||||
mSender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Retrieving latest KBootstrap version...");
|
||||
}
|
||||
new KVersionRetriever(this, false, false, "pw.prok", "KBootstrap");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void upToDate() {
|
||||
@Override
|
||||
public void upToDate() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void newVersion(String kbootstrapVersion) {
|
||||
boolean quite = MinecraftServer.kcauldronConfig.updatecheckerQuite
|
||||
.getValue();
|
||||
try {
|
||||
if (!quite) {
|
||||
mSender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Downloading KBootstrap " + kbootstrapVersion + "...");
|
||||
}
|
||||
File kbootstrap = File.createTempFile("kbootstrap",
|
||||
String.valueOf(System.currentTimeMillis()));
|
||||
download(
|
||||
"https://api.prok.pw/repo/blob/pw.prok/KBootstrap/latest/app",
|
||||
kbootstrap);
|
||||
if (!quite) {
|
||||
mSender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Installing KCauldron " + mVersion
|
||||
+ " via KBootstrap " + kbootstrapVersion + "...");
|
||||
}
|
||||
@Override
|
||||
public void newVersion(String kbootstrapVersion) {
|
||||
boolean quite = MinecraftServer.kcauldronConfig.updatecheckerQuite
|
||||
.getValue();
|
||||
try {
|
||||
if (!quite) {
|
||||
mSender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Downloading KBootstrap " + kbootstrapVersion + "...");
|
||||
}
|
||||
File kbootstrap = File.createTempFile("kbootstrap",
|
||||
String.valueOf(System.currentTimeMillis()));
|
||||
download(
|
||||
"https://api.prok.pw/repo/blob/pw.prok/KBootstrap/latest/app",
|
||||
kbootstrap);
|
||||
if (!quite) {
|
||||
mSender.sendMessage(ChatColor.DARK_PURPLE
|
||||
+ "Installing KCauldron " + mVersion
|
||||
+ " via KBootstrap " + kbootstrapVersion + "...");
|
||||
}
|
||||
|
||||
String javahome = System.getProperty("java.home");
|
||||
String javapath = javahome + "/bin/java";
|
||||
String javahome = System.getProperty("java.home");
|
||||
String javapath = javahome + "/bin/java";
|
||||
|
||||
List<String> command = new ArrayList<String>();
|
||||
command.add(javapath);
|
||||
command.add("-jar");
|
||||
command.add(kbootstrap.getCanonicalPath());
|
||||
command.add("--serverDir");
|
||||
command.add(KCauldron.getServerHome().getCanonicalPath());
|
||||
command.add("--installKCauldron");
|
||||
command.add(String.format("%s:%s:%s", KCauldron.getGroup(), KCauldron.getChannel(), mVersion));
|
||||
final String[] symlinks = MinecraftServer.kcauldronConfig.updatecheckerSymlinks
|
||||
.getValue().trim().split(File.pathSeparator);
|
||||
for (String symlink : symlinks) {
|
||||
command.add("--serverSymlinks");
|
||||
command.add(symlink);
|
||||
}
|
||||
List<String> command = new ArrayList<String>();
|
||||
command.add(javapath);
|
||||
command.add("-jar");
|
||||
command.add(kbootstrap.getCanonicalPath());
|
||||
command.add("--serverDir");
|
||||
command.add(KCauldron.getServerHome().getCanonicalPath());
|
||||
command.add("--installKCauldron");
|
||||
command.add(String.format("%s:%s:%s", KCauldron.getGroup(), KCauldron.getChannel(), mVersion));
|
||||
final String[] symlinks = MinecraftServer.kcauldronConfig.updatecheckerSymlinks
|
||||
.getValue().trim().split(File.pathSeparator);
|
||||
for (String symlink : symlinks) {
|
||||
command.add("--serverSymlinks");
|
||||
command.add(symlink);
|
||||
}
|
||||
|
||||
Bukkit.getConsoleSender().sendMessage(
|
||||
"Starting command: " + Joiner.on(' ').join(command));
|
||||
Bukkit.getConsoleSender().sendMessage(
|
||||
"Starting command: " + Joiner.on(' ').join(command));
|
||||
|
||||
ProcessBuilder builder = new ProcessBuilder(command);
|
||||
builder.environment().put("JAVA_HOME", javahome);
|
||||
switch (builder.start().waitFor()) {
|
||||
case 0:
|
||||
mSender.sendMessage(ChatColor.GREEN + "KCauldron " + mVersion
|
||||
+ " installed");
|
||||
break;
|
||||
default:
|
||||
mSender.sendMessage(ChatColor.RED
|
||||
+ "Failed to install KCauldron " + mVersion);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (!quite) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (mSender != null) {
|
||||
mSender.sendMessage(ChatColor.RED + "Failed update to "
|
||||
+ mVersion);
|
||||
}
|
||||
} finally {
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
}
|
||||
}
|
||||
ProcessBuilder builder = new ProcessBuilder(command);
|
||||
builder.environment().put("JAVA_HOME", javahome);
|
||||
switch (builder.start().waitFor()) {
|
||||
case 0:
|
||||
mSender.sendMessage(ChatColor.GREEN + "KCauldron " + mVersion
|
||||
+ " installed");
|
||||
break;
|
||||
default:
|
||||
mSender.sendMessage(ChatColor.RED
|
||||
+ "Failed to install KCauldron " + mVersion);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
if (!quite) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
if (mSender != null) {
|
||||
mSender.sendMessage(ChatColor.RED + "Failed update to "
|
||||
+ mVersion);
|
||||
}
|
||||
} finally {
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
t.printStackTrace();
|
||||
}
|
||||
@Override
|
||||
public void error(Throwable t) {
|
||||
KCauldron.sUpdateInProgress = false;
|
||||
t.printStackTrace();
|
||||
}
|
||||
|
||||
private static void download(String url, File destination)
|
||||
throws IOException {
|
||||
HttpUriRequest request = RequestBuilder
|
||||
.get()
|
||||
.setUri(url)
|
||||
.addParameter("hostname",
|
||||
MinecraftServer.getServer().getHostname())
|
||||
.addParameter("port",
|
||||
String.valueOf(MinecraftServer.getServer().getPort()))
|
||||
.build();
|
||||
CloseableHttpClient client = HttpClientBuilder.create()
|
||||
.setRedirectStrategy(new LaxRedirectStrategy())
|
||||
.setUserAgent("KCauldron Updater").build();
|
||||
private static void download(String url, File destination)
|
||||
throws IOException {
|
||||
HttpUriRequest request = RequestBuilder
|
||||
.get()
|
||||
.setUri(url)
|
||||
.addParameter("hostname",
|
||||
MinecraftServer.getServer().getHostname())
|
||||
.addParameter("port",
|
||||
String.valueOf(MinecraftServer.getServer().getPort()))
|
||||
.build();
|
||||
CloseableHttpClient client = HttpClientBuilder.create()
|
||||
.setRedirectStrategy(new LaxRedirectStrategy())
|
||||
.setUserAgent("KCauldron Updater").build();
|
||||
|
||||
HttpResponse response = client.execute(request);
|
||||
if (response.getStatusLine().getStatusCode() != 200) {
|
||||
client.close();
|
||||
throw new IllegalStateException("Could not download " + url);
|
||||
}
|
||||
InputStream is = response.getEntity().getContent();
|
||||
OutputStream os = new FileOutputStream(destination);
|
||||
IOUtils.copy(is, os);
|
||||
is.close();
|
||||
os.close();
|
||||
client.close();
|
||||
}
|
||||
HttpResponse response = client.execute(request);
|
||||
if (response.getStatusLine().getStatusCode() != 200) {
|
||||
client.close();
|
||||
throw new IllegalStateException("Could not download " + url);
|
||||
}
|
||||
InputStream is = response.getEntity().getContent();
|
||||
OutputStream os = new FileOutputStream(destination);
|
||||
IOUtils.copy(is, os);
|
||||
is.close();
|
||||
os.close();
|
||||
client.close();
|
||||
}
|
||||
}
|
||||
|
@ -16,112 +16,112 @@ import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
|
||||
public class KVersionRetriever implements Runnable, UncaughtExceptionHandler {
|
||||
private static final boolean DEBUG;
|
||||
private static final KLog sLogger;
|
||||
private static final JSONParser sParser;
|
||||
private static MinecraftServer sServer;
|
||||
private static final boolean DEBUG;
|
||||
private static final KLog sLogger;
|
||||
private static final JSONParser sParser;
|
||||
private static MinecraftServer sServer;
|
||||
|
||||
static {
|
||||
DEBUG = false;
|
||||
sLogger = KLog.get(KVersionRetriever.class.getSimpleName());
|
||||
static {
|
||||
DEBUG = false;
|
||||
sLogger = KLog.get(KVersionRetriever.class.getSimpleName());
|
||||
|
||||
sParser = new JSONParser();
|
||||
}
|
||||
sParser = new JSONParser();
|
||||
}
|
||||
|
||||
public static void init(MinecraftServer server) {
|
||||
sServer = server;
|
||||
if (MinecraftServer.kcauldronConfig.updatecheckerEnable.getValue()) {
|
||||
startServer(DefaultUpdateCallback.INSTANCE, true);
|
||||
}
|
||||
}
|
||||
public static void init(MinecraftServer server) {
|
||||
sServer = server;
|
||||
if (MinecraftServer.kcauldronConfig.updatecheckerEnable.getValue()) {
|
||||
startServer(DefaultUpdateCallback.INSTANCE, true);
|
||||
}
|
||||
}
|
||||
|
||||
public static void startServer(IVersionCheckCallback callback, boolean loop) {
|
||||
new KVersionRetriever(callback, loop, true, KCauldron.getGroup(),
|
||||
KCauldron.getChannel());
|
||||
}
|
||||
public static void startServer(IVersionCheckCallback callback, boolean loop) {
|
||||
new KVersionRetriever(callback, loop, true, KCauldron.getGroup(),
|
||||
KCauldron.getChannel());
|
||||
}
|
||||
|
||||
private final IVersionCheckCallback mCallback;
|
||||
private final boolean mLoop;
|
||||
private final Thread mThread;
|
||||
private final String mGroup;
|
||||
private final String mName;
|
||||
private final boolean mUpToDateSupport;
|
||||
private final IVersionCheckCallback mCallback;
|
||||
private final boolean mLoop;
|
||||
private final Thread mThread;
|
||||
private final String mGroup;
|
||||
private final String mName;
|
||||
private final boolean mUpToDateSupport;
|
||||
|
||||
public KVersionRetriever(IVersionCheckCallback callback, boolean loop,
|
||||
boolean upToDateSupport, String group, String name) {
|
||||
if (DEBUG)
|
||||
sLogger.info("Created new version retrivier");
|
||||
mCallback = callback;
|
||||
mLoop = loop;
|
||||
mUpToDateSupport = upToDateSupport;
|
||||
mGroup = group;
|
||||
mName = name;
|
||||
mThread = new Thread(this);
|
||||
mThread.setName("KCauldron version retrievier");
|
||||
mThread.setPriority(Thread.MIN_PRIORITY);
|
||||
mThread.setDaemon(true);
|
||||
mThread.setUncaughtExceptionHandler(this);
|
||||
mThread.start();
|
||||
}
|
||||
public KVersionRetriever(IVersionCheckCallback callback, boolean loop,
|
||||
boolean upToDateSupport, String group, String name) {
|
||||
if (DEBUG)
|
||||
sLogger.info("Created new version retrivier");
|
||||
mCallback = callback;
|
||||
mLoop = loop;
|
||||
mUpToDateSupport = upToDateSupport;
|
||||
mGroup = group;
|
||||
mName = name;
|
||||
mThread = new Thread(this);
|
||||
mThread.setName("KCauldron version retrievier");
|
||||
mThread.setPriority(Thread.MIN_PRIORITY);
|
||||
mThread.setDaemon(true);
|
||||
mThread.setUncaughtExceptionHandler(this);
|
||||
mThread.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (!mThread.isInterrupted()) {
|
||||
check();
|
||||
if (!mLoop)
|
||||
break;
|
||||
try {
|
||||
Thread.sleep(1000 * 60 * 10);// Sleep ten minutes
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
while (!mThread.isInterrupted()) {
|
||||
check();
|
||||
if (!mLoop)
|
||||
break;
|
||||
try {
|
||||
Thread.sleep(1000 * 60 * 10);// Sleep ten minutes
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void check() {
|
||||
try {
|
||||
HttpUriRequest request = RequestBuilder
|
||||
.get()
|
||||
.setUri("https://api.prok.pw/repo/version/" + mGroup + "/"
|
||||
+ mName)
|
||||
.addParameter("hostname", sServer.getHostname())
|
||||
.addParameter("port", "" + sServer.getPort()).build();
|
||||
HttpResponse response = HttpClientBuilder.create()
|
||||
.setUserAgent("KCauldron Version Retriever")
|
||||
.setRedirectStrategy(new LaxRedirectStrategy()).build()
|
||||
.execute(request);
|
||||
if (response.getStatusLine().getStatusCode() != 200) {
|
||||
uncaughtException(mThread, new IllegalStateException(
|
||||
"Status code isn't OK"));
|
||||
return;
|
||||
}
|
||||
JSONObject json = (JSONObject) sParser.parse(new InputStreamReader(
|
||||
response.getEntity().getContent()));
|
||||
String version = (String) json.get("version");
|
||||
if (!mUpToDateSupport || KCauldron.getCurrentVersion() == null
|
||||
|| !version.equals(KCauldron.getCurrentVersion())) {
|
||||
mCallback.newVersion(version);
|
||||
} else {
|
||||
mCallback.upToDate();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
uncaughtException(null, e);
|
||||
}
|
||||
}
|
||||
private void check() {
|
||||
try {
|
||||
HttpUriRequest request = RequestBuilder
|
||||
.get()
|
||||
.setUri("https://api.prok.pw/repo/version/" + mGroup + "/"
|
||||
+ mName)
|
||||
.addParameter("hostname", sServer.getHostname())
|
||||
.addParameter("port", "" + sServer.getPort()).build();
|
||||
HttpResponse response = HttpClientBuilder.create()
|
||||
.setUserAgent("KCauldron Version Retriever")
|
||||
.setRedirectStrategy(new LaxRedirectStrategy()).build()
|
||||
.execute(request);
|
||||
if (response.getStatusLine().getStatusCode() != 200) {
|
||||
uncaughtException(mThread, new IllegalStateException(
|
||||
"Status code isn't OK"));
|
||||
return;
|
||||
}
|
||||
JSONObject json = (JSONObject) sParser.parse(new InputStreamReader(
|
||||
response.getEntity().getContent()));
|
||||
String version = (String) json.get("version");
|
||||
if (!mUpToDateSupport || KCauldron.getCurrentVersion() == null
|
||||
|| !version.equals(KCauldron.getCurrentVersion())) {
|
||||
mCallback.newVersion(version);
|
||||
} else {
|
||||
mCallback.upToDate();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
uncaughtException(null, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void uncaughtException(Thread t, Throwable e) {
|
||||
sLogger.warning(e, "Error occured during retriving version");
|
||||
if (mCallback != null) {
|
||||
mCallback.error(e);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void uncaughtException(Thread t, Throwable e) {
|
||||
sLogger.warning(e, "Error occured during retriving version");
|
||||
if (mCallback != null) {
|
||||
mCallback.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IVersionCheckCallback {
|
||||
void upToDate();
|
||||
public interface IVersionCheckCallback {
|
||||
void upToDate();
|
||||
|
||||
void newVersion(String newVersion);
|
||||
void newVersion(String newVersion);
|
||||
|
||||
void error(Throwable t);
|
||||
}
|
||||
void error(Throwable t);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user