mirror of
https://github.com/ME1312/SubServers-2.git
synced 2024-11-22 10:15:52 +01:00
Use tar.xz
for downloading templates
This commit is contained in:
parent
d3f3f194d0
commit
1427ff04e1
@ -28,7 +28,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.ME1312.Galaxi</groupId>
|
<groupId>net.ME1312.Galaxi</groupId>
|
||||||
<artifactId>GalaxiUtil</artifactId>
|
<artifactId>GalaxiUtil</artifactId>
|
||||||
<version>21w26b</version>
|
<version>21w27b</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -43,6 +43,18 @@
|
|||||||
<version>1.1</version>
|
<version>1.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.kamranzafar</groupId>
|
||||||
|
<artifactId>jtar</artifactId>
|
||||||
|
<version>2.3</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.tukaani</groupId>
|
||||||
|
<artifactId>xz</artifactId>
|
||||||
|
<version>1.9</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -82,8 +82,9 @@ public class ExternalSubCreator extends SubCreator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (host.available && !Util.getDespiteException(() -> Util.reflect(SubProxy.class.getDeclaredField("reloading"), host.plugin), false)) {
|
if (host.available && !Util.getDespiteException(() -> Util.reflect(SubProxy.class.getDeclaredField("reloading"), host.plugin), false)) {
|
||||||
host.queue(new PacketExUploadTemplates(host.plugin));
|
host.queue(new PacketExConfigureHost(host.plugin, host), new PacketExUploadTemplates(host.plugin, () -> {
|
||||||
if (enableRT == null || enableRT) host.queue(new PacketExDownloadTemplates(host.plugin, host));
|
if (enableRT == null || enableRT) host.queue(new PacketExDownloadTemplates(host.plugin, host));
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,12 +19,7 @@ public abstract class FileScanner {
|
|||||||
* @param whitelist File Whitelist
|
* @param whitelist File Whitelist
|
||||||
*/
|
*/
|
||||||
protected void scan(File dir, String... whitelist) throws IOException {
|
protected void scan(File dir, String... whitelist) throws IOException {
|
||||||
List<String> files;
|
List<String> files = Util.searchDirectory(dir);
|
||||||
try {
|
|
||||||
files = Util.reflect(Util.class.getDeclaredMethod("zipsearch", File.class, File.class), null, dir, dir);
|
|
||||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
|
|
||||||
throw new IllegalStateException("Cannot access zipsearch()", e);
|
|
||||||
}
|
|
||||||
if (files.size() <= 0 || whitelist.length <= 0)
|
if (files.size() <= 0 || whitelist.length <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -8,10 +8,22 @@ import net.ME1312.SubData.Server.Protocol.PacketStreamOut;
|
|||||||
import net.ME1312.SubData.Server.SubDataClient;
|
import net.ME1312.SubData.Server.SubDataClient;
|
||||||
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
|
import net.ME1312.SubServers.Bungee.Host.External.ExternalHost;
|
||||||
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
|
import net.ME1312.SubServers.Bungee.Host.External.ExternalSubCreator;
|
||||||
|
import net.ME1312.SubServers.Bungee.Host.SubCreator.ServerTemplate;
|
||||||
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
|
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
|
||||||
import net.ME1312.SubServers.Bungee.SubProxy;
|
import net.ME1312.SubServers.Bungee.SubProxy;
|
||||||
|
|
||||||
|
import org.kamranzafar.jtar.TarEntry;
|
||||||
|
import org.kamranzafar.jtar.TarOutputStream;
|
||||||
|
import org.tukaani.xz.LZMA2Options;
|
||||||
|
import org.tukaani.xz.XZOutputStream;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import static org.tukaani.xz.LZMA2Options.MODE_FAST;
|
||||||
|
import static org.tukaani.xz.XZ.CHECK_SHA256;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* External Host Template Download Packet
|
* External Host Template Download Packet
|
||||||
@ -39,8 +51,27 @@ public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
|
|||||||
public void send(SubDataClient client, OutputStream stream) throws Throwable {
|
public void send(SubDataClient client, OutputStream stream) throws Throwable {
|
||||||
try {
|
try {
|
||||||
if (client.getBlockSize() < DataSize.MBB) client.tempBlockSize(DataSize.MBB);
|
if (client.getBlockSize() < DataSize.MBB) client.tempBlockSize(DataSize.MBB);
|
||||||
Util.zip(new UniversalFile(plugin.dir, "SubServers:Templates"), stream);
|
HashMap<String, ServerTemplate> map = Util.getDespiteException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("templates"), ((ExternalHost) client.getHandler()).getCreator()), new HashMap<>());
|
||||||
stream.close();
|
TarOutputStream tar = new TarOutputStream(new XZOutputStream(stream, new LZMA2Options(MODE_FAST), CHECK_SHA256));
|
||||||
|
File dir = new UniversalFile(plugin.dir, "SubServers:Templates");
|
||||||
|
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
for (String file : Util.searchDirectory(dir)) {
|
||||||
|
int index = file.indexOf(File.separatorChar);
|
||||||
|
if (index != -1 && !map.containsKey(file.substring(0, index).toLowerCase())) {
|
||||||
|
|
||||||
|
tar.putNextEntry(new TarEntry(new File(dir, file), file.replace(File.separatorChar, '/')));
|
||||||
|
FileInputStream in = new FileInputStream(dir.getAbsolutePath() + File.separator + file);
|
||||||
|
|
||||||
|
int len;
|
||||||
|
while ((len = in.read(buffer)) != -1) {
|
||||||
|
tar.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tar.close();
|
||||||
|
|
||||||
Util.isException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("enableRT"), host.getCreator(), true));
|
Util.isException(() -> Util.reflect(ExternalSubCreator.class.getDeclaredField("enableRT"), host.getCreator(), true));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -58,6 +89,6 @@ public class PacketExDownloadTemplates implements PacketIn, PacketStreamOut {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int version() {
|
public int version() {
|
||||||
return 0x0001;
|
return 0x0002;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,9 @@ import net.ME1312.SubServers.Bungee.Host.SubCreator;
|
|||||||
import net.ME1312.SubServers.Bungee.SubProxy;
|
import net.ME1312.SubServers.Bungee.SubProxy;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -20,13 +22,15 @@ import java.util.logging.Logger;
|
|||||||
* External Host Template Upload Packet
|
* External Host Template Upload Packet
|
||||||
*/
|
*/
|
||||||
public class PacketExUploadTemplates implements PacketObjectIn<Integer>, PacketOut {
|
public class PacketExUploadTemplates implements PacketObjectIn<Integer>, PacketOut {
|
||||||
|
private static LinkedList<Runnable> callbacks = new LinkedList<Runnable>();
|
||||||
private SubProxy plugin;
|
private SubProxy plugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* New PacketExUploadTemplates
|
* New PacketExUploadTemplates
|
||||||
*/
|
*/
|
||||||
public PacketExUploadTemplates(SubProxy plugin) {
|
public PacketExUploadTemplates(SubProxy plugin, Runnable... callbacks) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
PacketExUploadTemplates.callbacks.addAll(Arrays.asList(callbacks));
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
@ -50,6 +54,12 @@ public class PacketExUploadTemplates implements PacketObjectIn<Integer>, PacketO
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LinkedList<Runnable> callbacks = PacketExUploadTemplates.callbacks;
|
||||||
|
PacketExUploadTemplates.callbacks = new LinkedList<Runnable>();
|
||||||
|
for (Runnable r : callbacks) {
|
||||||
|
r.run();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.ME1312.Galaxi</groupId>
|
<groupId>net.ME1312.Galaxi</groupId>
|
||||||
<artifactId>GalaxiUtil</artifactId>
|
<artifactId>GalaxiUtil</artifactId>
|
||||||
<version>21w26b</version>
|
<version>21w27b</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -30,13 +30,13 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.ME1312.Galaxi</groupId>
|
<groupId>net.ME1312.Galaxi</groupId>
|
||||||
<artifactId>GalaxiEngine</artifactId>
|
<artifactId>GalaxiEngine</artifactId>
|
||||||
<version>21w26b</version>
|
<version>21w27b</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.ME1312.Galaxi</groupId>
|
<groupId>net.ME1312.Galaxi</groupId>
|
||||||
<artifactId>GalaxiUI</artifactId>
|
<artifactId>GalaxiUI</artifactId>
|
||||||
<version>21w26b</version>
|
<version>21w27b</version>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
@ -51,6 +51,18 @@
|
|||||||
<version>1.1</version>
|
<version>1.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.kamranzafar</groupId>
|
||||||
|
<artifactId>jtar</artifactId>
|
||||||
|
<version>2.3</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.tukaani</groupId>
|
||||||
|
<artifactId>xz</artifactId>
|
||||||
|
<version>1.9</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -23,12 +23,7 @@ public abstract class FileScanner {
|
|||||||
* @param whitelist File Whitelist
|
* @param whitelist File Whitelist
|
||||||
*/
|
*/
|
||||||
protected void scan(File dir, String... whitelist) throws IOException {
|
protected void scan(File dir, String... whitelist) throws IOException {
|
||||||
List<String> files;
|
List<String> files = Util.searchDirectory(dir);
|
||||||
try {
|
|
||||||
files = Util.reflect(Util.class.getDeclaredMethod("zipsearch", File.class, File.class), null, dir, dir);
|
|
||||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
|
|
||||||
throw new IllegalStateException("Cannot access zipsearch()", e);
|
|
||||||
}
|
|
||||||
if (files.size() <= 0 || whitelist.length <= 0)
|
if (files.size() <= 0 || whitelist.length <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -9,6 +9,12 @@ import net.ME1312.SubData.Client.SubDataSender;
|
|||||||
import net.ME1312.SubServers.Host.ExHost;
|
import net.ME1312.SubServers.Host.ExHost;
|
||||||
import net.ME1312.SubServers.Host.SubAPI;
|
import net.ME1312.SubServers.Host.SubAPI;
|
||||||
|
|
||||||
|
import org.kamranzafar.jtar.TarEntry;
|
||||||
|
import org.kamranzafar.jtar.TarInputStream;
|
||||||
|
import org.tukaani.xz.XZInputStream;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,7 +48,36 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
dir.mkdirs();
|
dir.mkdirs();
|
||||||
Util.unzip(stream, dir);
|
TarInputStream tar = new TarInputStream(new XZInputStream(stream));
|
||||||
|
|
||||||
|
byte[] buffer = new byte[4096];
|
||||||
|
TarEntry entry;
|
||||||
|
while ((entry = tar.getNextEntry()) != null) {
|
||||||
|
File newFile = new File(dir + File.separator + entry.getName().replace('/', File.separatorChar));
|
||||||
|
if (newFile.exists()) {
|
||||||
|
if (newFile.isDirectory()) {
|
||||||
|
Util.deleteDirectory(newFile);
|
||||||
|
} else {
|
||||||
|
newFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (entry.isDirectory()) {
|
||||||
|
newFile.mkdirs();
|
||||||
|
continue;
|
||||||
|
} else if (!newFile.getParentFile().exists()) {
|
||||||
|
newFile.getParentFile().mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
|
FileOutputStream fos = new FileOutputStream(newFile);
|
||||||
|
int len;
|
||||||
|
while ((len = tar.read(buffer)) != -1) {
|
||||||
|
fos.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
fos.close();
|
||||||
|
}
|
||||||
|
tar.close();
|
||||||
|
|
||||||
host.creator.load(true);
|
host.creator.load(true);
|
||||||
host.log.info.println(((first)?"":"New ") + "Remote Template Files Downloaded");
|
host.log.info.println(((first)?"":"New ") + "Remote Template Files Downloaded");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -54,6 +89,6 @@ public class PacketExDownloadTemplates implements PacketOut, PacketStreamIn {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int version() {
|
public int version() {
|
||||||
return 0x0001;
|
return 0x0002;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user