From b4bb0ddc156ba61fe53d1db5074495e2a7445915 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Wed, 18 Apr 2018 18:06:36 +1000 Subject: [PATCH] * --- .../java/com/boydti/fawe/config/Settings.java | 1 + .../java/com/boydti/fawe/web/SchemSync.java | 49 +++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/boydti/fawe/config/Settings.java b/core/src/main/java/com/boydti/fawe/config/Settings.java index 3a333496..b0fd09bd 100644 --- a/core/src/main/java/com/boydti/fawe/config/Settings.java +++ b/core/src/main/java/com/boydti/fawe/config/Settings.java @@ -66,6 +66,7 @@ public class Settings extends Config { @Comment("Paths for various directories") public static final class PATHS { + public String TOKENS = "tokens"; @Comment({ "Put any minecraft or mod jars for FAWE to be aware of block textures", }) diff --git a/core/src/main/java/com/boydti/fawe/web/SchemSync.java b/core/src/main/java/com/boydti/fawe/web/SchemSync.java index eaa1ef6c..0e15996c 100644 --- a/core/src/main/java/com/boydti/fawe/web/SchemSync.java +++ b/core/src/main/java/com/boydti/fawe/web/SchemSync.java @@ -3,31 +3,37 @@ package com.boydti.fawe.web; import com.boydti.fawe.Fawe; import com.boydti.fawe.config.Settings; import com.boydti.fawe.util.MainUtil; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; +import com.sk89q.worldedit.LocalConfiguration; +import com.sk89q.worldedit.WorldEdit; +import com.sk89q.worldedit.command.UtilityCommands; +import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.nio.ByteBuffer; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import java.util.function.Consumer; public class SchemSync implements Runnable { private final static char PORT = 62522; private final File tokensFile; + private final WorldEdit worldEdit; + private final File working; private Map tokens; public SchemSync() { this.tokensFile = MainUtil.getFile(Fawe.imp().getDirectory(), Settings.IMP.PATHS.TOKENS, "TOKENS.TXT"); + this.worldEdit = WorldEdit.getInstance(); + LocalConfiguration config = worldEdit.getConfiguration(); + this.working = worldEdit.getWorkingDirectoryFile(config.saveDir); } private void loadTokens() { if (tokens == null) { String tokensDir = Settings.IMP.PATHS.TOKENS; tokens = new HashMap<>(); - } } @@ -49,6 +55,41 @@ public class SchemSync implements Runnable { UUID receivedToken = new UUID(buf.getLong(), buf.getLong()); if (!receivedToken.equals(expectedToken)) continue; + + try (DataInputStream dis = new DataInputStream(in)) { + File dir = new File(working, uuid.toString()); + + int data = dis.readByte() & 0xFF; + switch (data) { + case 0: {// list + try (DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream())) { + UtilityCommands.allFiles(dir.listFiles(), true, new Consumer() { + @Override + public void accept(File file) { + String path = dir.toURI().relativize(file.toURI()).getPath(); + try { + out.writeUTF(path); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + } + break; + } + case 1: {// get + String input = dis.readUTF(); + File file = new File(dir, input); + if (!MainUtil.isInSubDirectory(working, file)) { + + } + if (MainUtil.isInSubDirectory(working, file) && file.exists()) + break; + } + } + } + // list + // get } }