Dieser Commit ist enthalten in:
Ursprung
d9ad5bd14a
Commit
3b0e4aa5aa
@ -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,49 +41,37 @@ 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) {
|
return;
|
||||||
if(searchQueue.isEmpty()) {
|
}
|
||||||
watchdog.cancel();
|
|
||||||
watchdog = null;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(currentSearch == null) {
|
synchronized (searchQueue) {
|
||||||
currentSearch = searchQueue.remove(0);
|
if(searchQueue.isEmpty()) {
|
||||||
currentSearch.start();
|
return;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, 0, 1, TimeUnit.SECONDS);
|
currentSearch = searchQueue.poll();
|
||||||
|
currentSearch.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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(new SchematicSearch(player, node, behavior));
|
||||||
searchQueue.add(0, new SchematicSearch(player, node, behavior));
|
startNext();
|
||||||
} else {
|
if (!searchQueue.isEmpty()) {
|
||||||
searchQueue.add(new SchematicSearch(player, node, behavior));
|
Message.send("SCHEMATIC_SEARCH_QUEUED", player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(watchdog == null) {
|
|
||||||
startQueueWatchdog();
|
|
||||||
} else {
|
|
||||||
Message.send("SCHEMATIC_SEARCH_QUEUED", player);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void abortAll() {
|
public static void abortAll() {
|
||||||
@ -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
|
||||||
|
@ -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.
|
@ -647,4 +647,16 @@ ADVENT_CALENDAR_TITLE=§eAdventskalender
|
|||||||
ADVENT_CALENDAR_DAY=§7Tag§8: §e{0}
|
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.
|
In neuem Issue referenzieren
Einen Benutzer sperren