SteamWar/BungeeCore
Archiviert
13
2

Fix SchematicSearch
Alle Prüfungen waren erfolgreich
SteamWarCI Build successful

Dieser Commit ist enthalten in:
Chaoscaot 2023-05-01 16:12:45 +02:00
Ursprung d9ad5bd14a
Commit 3b0e4aa5aa
3 geänderte Dateien mit 39 neuen und 42 gelöschten Zeilen

Datei anzeigen

@ -19,7 +19,6 @@
package de.steamwar.bungeecore.util; package de.steamwar.bungeecore.util;
import com.google.gson.Gson;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
@ -42,50 +41,38 @@ import java.nio.file.Files;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
public class SchematicSearch { public class SchematicSearch {
private static final String SEARCH_BINARY = "/home/chaoscaot/schemsearch/target/release/schemsearch-cli";
private static final Gson gson = new Gson(); private static final LinkedBlockingQueue<SchematicSearch> searchQueue = new LinkedBlockingQueue<>();
private static final String searchBinary = "/home/chaoscaot/schemsearch/target/release/schemsearch-cli";
private static final List<SchematicSearch> searchQueue = new ArrayList<>();
private static SchematicSearch currentSearch; private static SchematicSearch currentSearch;
private static ScheduledTask watchdog;
private static void startQueueWatchdog() { private static void startNext() {
watchdog = BungeeCore.get().getProxy().getScheduler().schedule(BungeeCore.get(), () -> { if(currentSearch != null) {
synchronized (searchQueue) {
if(searchQueue.isEmpty()) {
watchdog.cancel();
watchdog = null;
return; return;
} }
if(currentSearch == null) { synchronized (searchQueue) {
currentSearch = searchQueue.remove(0); if(searchQueue.isEmpty()) {
return;
}
currentSearch = searchQueue.poll();
currentSearch.start(); currentSearch.start();
} }
} }
}, 0, 1, TimeUnit.SECONDS);
}
public static void queueSearch(ProxiedPlayer player, SchematicNode node, SchematicSearchBehavior behavior) { public static void queueSearch(ProxiedPlayer player, SchematicNode node, SchematicSearchBehavior behavior) {
SteamwarUser user = SteamwarUser.get(player.getUniqueId());
synchronized (searchQueue) { synchronized (searchQueue) {
if(user.getUserGroup().isAdminGroup()) {
searchQueue.add(0, new SchematicSearch(player, node, behavior));
} else {
searchQueue.add(new SchematicSearch(player, node, behavior)); searchQueue.add(new SchematicSearch(player, node, behavior));
} startNext();
} if (!searchQueue.isEmpty()) {
if(watchdog == null) {
startQueueWatchdog();
} else {
Message.send("SCHEMATIC_SEARCH_QUEUED", player); Message.send("SCHEMATIC_SEARCH_QUEUED", player);
} }
} }
}
public static void abortAll() { public static void abortAll() {
synchronized (searchQueue) { synchronized (searchQueue) {
@ -107,7 +94,7 @@ public class SchematicSearch {
} }
private static List<String> constructArguments(SteamwarUser user, File pattern, SchematicSearchBehavior behavior) { private static List<String> constructArguments(SteamwarUser user, File pattern, SchematicSearchBehavior behavior) {
List<String> args = new ArrayList<>(Arrays.asList(searchBinary, "-T", "2", "-s", "-u", String.valueOf(user.getId()), "-o", "json:std", "-m", "50")); List<String> args = new ArrayList<>(Arrays.asList(SEARCH_BINARY, "-T", "2", "-s", "-u", String.valueOf(user.getId()), "-o", "json:std", "-m", "50"));
if(behavior.isAirAsAny()) { if(behavior.isAirAsAny()) {
args.add("-A"); args.add("-A");
} }
@ -269,13 +256,10 @@ public class SchematicSearch {
if (matches.size() >= 49) { if (matches.size() >= 49) {
Message.send("SCHEMATIC_SEARCH_TOO_MANY_RESULTS", player); Message.send("SCHEMATIC_SEARCH_TOO_MANY_RESULTS", player);
} }
end();
} catch (IOException | InterruptedException e) {
end();
} catch (Exception e) { } catch (Exception e) {
end();
throw new SecurityException(e); throw new SecurityException(e);
} finally {
end();
} }
}); });
} }
@ -298,6 +282,7 @@ public class SchematicSearch {
currentSearch = null; currentSearch = null;
} }
} }
startNext();
} }
@AllArgsConstructor @AllArgsConstructor

Datei anzeigen

@ -696,11 +696,11 @@ MOD_ITEM_BACK=§7Back
SCHEMATIC_SEARCH_QUEUED=§7Your search has been queued and will be executed shortly. SCHEMATIC_SEARCH_QUEUED=§7Your search has been queued and will be executed shortly.
SCHEMATIC_SEARCH_STARTED=§7Your search for "§e{0}§7" has started. SCHEMATIC_SEARCH_STARTED=§7Your search for "§e{0}§7" has started.
SCHEMATIC_SEARCH_NO_RESULTS=§cNo results found. SCHEMATIC_SEARCH_NO_RESULTS=§cNo results found.
SCHEMATIC_SEARCH_RESULT_HEADER=§7Searched in §e{0} §7schematics in§e{1}. SCHEMATIC_SEARCH_RESULT_HEADER=§7Searched §e{0} §7schematics in§e{1}.
SCHEMATIC_SEARCH_RESULT=§7{0}: §e{1}§7% §8(§e{2}§7,§e{3},§e{4}§8) SCHEMATIC_SEARCH_RESULT=§7{0}: §e{1}§7% §8(§e{2}§7,§e{3},§e{4}§8)
SCHEMATIC_SEARCH_RESULT_HOVER=§7Click to get more info about {0}. SCHEMATIC_SEARCH_RESULT_HOVER=§7Click for more info about {0}.
SCHEMATIC_SEARCH_NOT_SUPPORTED=§cThis schematic is not supported by the schematic search. SCHEMATIC_SEARCH_NOT_SUPPORTED=§cThis schematic is not supported because it is on an old format.
SCHEMATIC_SEARCH_REMOVED_FROM_QUEUE=§cYour search has been removed from the queue because you switched servers. SCHEMATIC_SEARCH_REMOVED_FROM_QUEUE=§cYour search has been removed from the queue because you switched servers.
SCHEMATIC_SEARCH_REMOVED_FROM_QUEUE_SOFTRELOAD=§cYour search has been removed from the queue because of an update. SCHEMATIC_SEARCH_REMOVED_FROM_QUEUE_SOFTRELOAD=§cYour search has been removed from the queue because of a software update.
SCHEMATIC_SEARCH_CANCELED_SOFTRELOAD=§cYour search has been canceled because of an update. SCHEMATIC_SEARCH_CANCELED_SOFTRELOAD=§cYour search has been cancelled because of a software update.
SCHEMATIC_SEARCH_TOO_MANY_RESULTS=§cToo many results found. Please be more specific. SCHEMATIC_SEARCH_TOO_MANY_RESULTS=§cToo many results found. Please be more specific.

Datei anzeigen

@ -648,3 +648,15 @@ ADVENT_CALENDAR_DAY=§7Tag§8: §e{0}
ADVENT_CALENDAR_MESSAGE=§eHast du heute schon dein Geschenk geholt? ADVENT_CALENDAR_MESSAGE=§eHast du heute schon dein Geschenk geholt?
ADVENT_CALENDAR_MESSAGE_HOVER=§eKlicken zum öffnen! ADVENT_CALENDAR_MESSAGE_HOVER=§eKlicken zum öffnen!
ADVENT_CALENDAR_OPEN=§7Du hast §e{0}§7 aus dem Adventskalender erhalten! ADVENT_CALENDAR_OPEN=§7Du hast §e{0}§7 aus dem Adventskalender erhalten!
#Schematic Search
SCHEMATIC_SEARCH_QUEUED=§7Deine Suche wurde in die Warteschlange eingereiht.
SCHEMATIC_SEARCH_STARTED=§7Deine Suche nach §e{0} §7wurde gestartet.
SCHEMATIC_SEARCH_NO_RESULTS=§cEs wurden keine Ergebnisse gefunden.
SCHEMATIC_SEARCH_RESULT_HEADER=§e{0} §7Schematics in §e{1} §7durchsucht
SCHEMATIC_SEARCH_RESULT_HOVER=§7Klicke für mehr Informationen
SCHEMATIC_SEARCH_NOT_SUPPORTED=§cDiese Schematic ist in einem alten Format und kann nicht genutzt werden.
SCHEMATIC_SEARCH_REMOVED_FROM_QUEUE=§cDeine Suche wurde aus der Warteschlange entfernt, weil du den Server gewechselt hast.
SCHEMATIC_SEARCH_REMOVED_FROM_QUEUE_SOFTRELOAD=§cWegen eines Software Updates wurde deine Suche aus der Warteschlange entfernt.
SCHEMATIC_SEARCH_CANCELED_SOFTRELOAD=§cDeine Suche wurde wegen eines Software Updates abgebrochen.
SCHEMATIC_SEARCH_TOO_MANY_RESULTS=§cEs wurden zu viele Ergebnisse gefunden. Bitte spezifiziere deine Suche.