Add config options to control autoSync

This commit is contained in:
Frank 2021-08-10 23:39:59 +02:00
parent ca721368ea
commit a21e7e115b
4 changed files with 82 additions and 51 deletions

View file

@ -16,6 +16,7 @@ import ru.bclib.api.dataexchange.DataHandler;
import ru.bclib.api.dataexchange.DataHandlerDescriptor; import ru.bclib.api.dataexchange.DataHandlerDescriptor;
import ru.bclib.api.dataexchange.handler.DataExchange.AutoSyncID; import ru.bclib.api.dataexchange.handler.DataExchange.AutoSyncID;
import ru.bclib.api.datafixer.DataFixerAPI; import ru.bclib.api.datafixer.DataFixerAPI;
import ru.bclib.config.Configs;
import ru.bclib.gui.screens.SyncFilesScreen; import ru.bclib.gui.screens.SyncFilesScreen;
import ru.bclib.gui.screens.WarnBCLibVersionMismatch; import ru.bclib.gui.screens.WarnBCLibVersionMismatch;
@ -61,29 +62,37 @@ public class HelloClient extends DataHandler {
//write BCLibVersion (=protocol version) //write BCLibVersion (=protocol version)
buf.writeInt(DataFixerAPI.getModVersion(vbclib)); buf.writeInt(DataFixerAPI.getModVersion(vbclib));
//write Plugin Versions
buf.writeInt(mods.size()); if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "offerMods", true)) {
for (String modID : mods) { //write Plugin Versions
writeString(buf, modID); buf.writeInt(mods.size());
final String ver = getModVersion(modID); for (String modID : mods) {
buf.writeInt(DataFixerAPI.getModVersion(ver)); writeString(buf, modID);
BCLib.LOGGER.info(" - Listing Mod " + modID + " v" + ver); final String ver = getModVersion(modID);
buf.writeInt(DataFixerAPI.getModVersion(ver));
BCLib.LOGGER.info(" - Listing Mod " + modID + " v" + ver);
}
} else {
buf.writeInt(0);
} }
//do only include files that exist on the server if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "offerConfigs", true)) {
final List<AutoFileSyncEntry> autoSyncFiles = DataExchange //do only include files that exist on the server
.getInstance() final List<AutoFileSyncEntry> existingAutoSyncFiles = DataExchange
.autoSyncFiles .getInstance()
.stream() .autoSyncFiles
.filter(e -> e.fileName.exists()) .stream()
.collect(Collectors.toList()); .filter(e -> e.fileName.exists())
.collect(Collectors.toList());
//send config Data //send config Data
buf.writeInt(autoSyncFiles.size()); buf.writeInt(existingAutoSyncFiles.size());
for (AutoFileSyncEntry entry : autoSyncFiles) { for (AutoFileSyncEntry entry : existingAutoSyncFiles) {
//System.out.println("Serializing " + entry.getFileHash()); entry.serialize(buf);
entry.serialize(buf); BCLib.LOGGER.info(" - Offering File " + entry);
BCLib.LOGGER.info(" - Offering File " + entry); }
} else {
buf.writeInt(0);
} }
} }
@ -148,7 +157,7 @@ public class HelloClient extends DataHandler {
BCLib.LOGGER.info(" - " + e + ": " + (willRequest ? " (requesting)":"")); BCLib.LOGGER.info(" - " + e + ": " + (willRequest ? " (requesting)":""));
} }
if (filesToRequest.size()>0) { if (filesToRequest.size()>0 && SendFiles.acceptFiles()) {
showDonwloadConfigs(client, filesToRequest); showDonwloadConfigs(client, filesToRequest);
return; return;
} }

View file

@ -10,6 +10,7 @@ import ru.bclib.api.dataexchange.DataExchangeAPI;
import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandler;
import ru.bclib.api.dataexchange.DataHandlerDescriptor; import ru.bclib.api.dataexchange.DataHandlerDescriptor;
import ru.bclib.api.datafixer.DataFixerAPI; import ru.bclib.api.datafixer.DataFixerAPI;
import ru.bclib.config.Configs;
import java.io.File; import java.io.File;
@ -76,6 +77,9 @@ public class HelloServer extends DataHandler {
protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) {
String localBclibVersion = HelloClient.getBCLibVersion(); String localBclibVersion = HelloClient.getBCLibVersion();
BCLib.LOGGER.info("Received Hello from Client. (server="+localBclibVersion+", client="+bclibVersion+")"); BCLib.LOGGER.info("Received Hello from Client. (server="+localBclibVersion+", client="+bclibVersion+")");
reply(new HelloClient(), server);
if (Configs.MAIN_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "enabled", true)) {
reply(new HelloClient(), server);
}
} }
} }

View file

@ -11,6 +11,7 @@ import net.minecraft.server.MinecraftServer;
import ru.bclib.BCLib; import ru.bclib.BCLib;
import ru.bclib.api.dataexchange.DataHandler; import ru.bclib.api.dataexchange.DataHandler;
import ru.bclib.api.dataexchange.DataHandlerDescriptor; import ru.bclib.api.dataexchange.DataHandlerDescriptor;
import ru.bclib.config.Configs;
import ru.bclib.gui.screens.ConfirmRestartScreen; import ru.bclib.gui.screens.ConfirmRestartScreen;
import ru.bclib.util.Pair; import ru.bclib.util.Pair;
import ru.bclib.util.Triple; import ru.bclib.util.Triple;
@ -36,6 +37,10 @@ public class SendFiles extends DataHandler {
this.files = files; this.files = files;
this.token = token; this.token = token;
} }
public static boolean acceptFiles() {
return Configs.CLIENT_CONFIG.getBoolean(Configs.MAIN_SYNC_CATEGORY, "acceptFiles", true);
}
@Override @Override
protected void serializeData(FriendlyByteBuf buf) { protected void serializeData(FriendlyByteBuf buf) {
@ -59,45 +64,49 @@ public class SendFiles extends DataHandler {
private List<Pair<AutoFileSyncEntry, byte[]>> receivedFiles; private List<Pair<AutoFileSyncEntry, byte[]>> receivedFiles;
@Override @Override
protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) { protected void deserializeFromIncomingData(FriendlyByteBuf buf, PacketSender responseSender, boolean fromClient) {
token = readString(buf); if (acceptFiles()) {
if (!token.equals(RequestFiles.currentToken)) { token = readString(buf);
if (!token.equals(RequestFiles.currentToken)) {
RequestFiles.newToken();
BCLib.LOGGER.error("Unrequested File Transfer!");
receivedFiles = new ArrayList<>(0);
return;
}
RequestFiles.newToken(); RequestFiles.newToken();
BCLib.LOGGER.error("Unrequested File Transfer!");
receivedFiles = new ArrayList<>(0);
return;
}
RequestFiles.newToken();
int size = buf.readInt(); int size = buf.readInt();
receivedFiles = new ArrayList<>(size); receivedFiles = new ArrayList<>(size);
BCLib.LOGGER.info("Server sent " + size + " Files:"); BCLib.LOGGER.info("Server sent " + size + " Files:");
for (int i=0; i<size; i++){ for (int i = 0; i < size; i++) {
Triple<AutoFileSyncEntry, byte[], DataExchange.AutoSyncID> p = AutoFileSyncEntry.deserializeContent(buf); Triple<AutoFileSyncEntry, byte[], DataExchange.AutoSyncID> p = AutoFileSyncEntry.deserializeContent(buf);
if (p.first != null) { if (p.first != null) {
receivedFiles.add(p); receivedFiles.add(p);
BCLib.LOGGER.info(" - " + p.first + " (" + p.second.length + " Bytes)"); BCLib.LOGGER.info(" - " + p.first + " (" + p.second.length + " Bytes)");
} else { } else {
BCLib.LOGGER.error(" - Failed to receive File " +p.third+ ", possibly sent from a Mod that is not installed on the client."); BCLib.LOGGER.error(" - Failed to receive File " + p.third + ", possibly sent from a Mod that is not installed on the client.");
}
} }
} }
} }
@Override @Override
protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) { protected void runOnGameThread(Minecraft client, MinecraftServer server, boolean isClient) {
BCLib.LOGGER.info("Writing Files:"); if (acceptFiles()) {
for (Pair<AutoFileSyncEntry, byte[]> entry : receivedFiles) { BCLib.LOGGER.info("Writing Files:");
final AutoFileSyncEntry e = entry.first; for (Pair<AutoFileSyncEntry, byte[]> entry : receivedFiles) {
final byte[] data = entry.second; final AutoFileSyncEntry e = entry.first;
Path path = e.fileName.toPath(); final byte[] data = entry.second;
BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)"); Path path = e.fileName.toPath();
try { BCLib.LOGGER.info(" - Writing " + path + " (" + data.length + " Bytes)");
Files.write(path, data); try {
} catch (IOException ioException) { Files.write(path, data);
BCLib.LOGGER.error(" --> Writing "+e.fileName+" failed: " + ioException); } catch (IOException ioException) {
BCLib.LOGGER.error(" --> Writing " + e.fileName + " failed: " + ioException);
}
} }
}
showConfirmRestart(client); showConfirmRestart(client);
}
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)

View file

@ -1,15 +1,24 @@
package ru.bclib.config; package ru.bclib.config;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import ru.bclib.BCLib; import ru.bclib.BCLib;
public class Configs { public class Configs {
public static final PathConfig MAIN_CONFIG = new PathConfig(BCLib.MOD_ID, "main"); public static final PathConfig MAIN_CONFIG = new PathConfig(BCLib.MOD_ID, "main");
public static final String MAIN_PATCH_CATEGORY = "patches"; public static final String MAIN_PATCH_CATEGORY = "patches";
public static final String MAIN_SYNC_CATEGORY = "client_sync";
public static final PathConfig RECIPE_CONFIG = new PathConfig(BCLib.MOD_ID, "recipes"); public static final PathConfig RECIPE_CONFIG = new PathConfig(BCLib.MOD_ID, "recipes");
@Environment(EnvType.CLIENT)
public static final PathConfig CLIENT_CONFIG = new PathConfig(BCLib.MOD_ID, "client");
public static void save() { public static void save() {
MAIN_CONFIG.saveChanges(); MAIN_CONFIG.saveChanges();
RECIPE_CONFIG.saveChanges(); RECIPE_CONFIG.saveChanges();
if (BCLib.isClient()) {
CLIENT_CONFIG.saveChanges();
}
} }
} }