DirectoryHandlerChangeTask.java
package com.hypixel.hytale.server.core.asset.monitor;
import com.hypixel.hytale.logger.HytaleLogger;
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import java.nio.file.Path;
import java.util.AbstractMap;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import javax.annotation.Nonnull;
public class DirectoryHandlerChangeTask implements Runnable {
public static final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
private static final long ACCUMULATION_DELAY_MILLIS = 1000L;
private final AssetMonitor assetMonitor;
private final Path parent;
private final AssetMonitorHandler handler;
ScheduledFuture<?> task;
();
Map<Path, PathEvent> paths = <Path, PathEvent>();
{
.assetMonitor = assetMonitor;
.parent = parent;
.handler = handler;
.task = AssetMonitor.runTask(, );
}
{
(!.changed.getAndSet()) {
.cancelSchedule();
{
LOGGER.at(Level.FINER).log(, .paths);
ObjectArrayList<Map.Entry<Path, PathEvent>> entries = <Map.Entry<Path, PathEvent>>(.paths.size());
(Map.Entry<Path, PathEvent> entry : .paths.entrySet()) {
entries.add( .SimpleEntry((Path)entry.getKey(), (PathEvent)entry.getValue()));
}
.paths.clear();
entries.sort(Comparator.comparingLong((value) -> ((PathEvent)value.getValue()).getTimestamp()));
Set<String> fileNames = ();
Map<Path, EventKind> eventPaths = <Path, EventKind>();
(Map.Entry<Path, PathEvent> entry : entries) {
(!fileNames.add(((Path)entry.getKey()).getFileName().toString())) {
LOGGER.at(Level.FINER).log(, eventPaths);
.handler.accept(eventPaths);
eventPaths = <Path, EventKind>();
fileNames.clear();
}
eventPaths.put((Path)entry.getKey(), ((PathEvent)entry.getValue()).getEventKind());
}
(!eventPaths.isEmpty()) {
LOGGER.at(Level.FINER).log(, eventPaths);
.handler.accept(eventPaths);
}
} (Exception e) {
((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(e)).log(, );
}
}
}
AssetMonitor {
.assetMonitor;
}
Path {
.parent;
}
AssetMonitorHandler {
.handler;
}
{
LOGGER.at(Level.FINEST).log(, path, pathEvent, );
.paths.put(path, pathEvent);
.changed.set();
}
{
LOGGER.at(Level.FINEST).log(, path, );
.paths.remove(path);
(.paths.isEmpty()) {
.cancelSchedule();
} {
.changed.set();
}
}
{
AssetMonitor.LOGGER.at(Level.FINEST).log(, );
.changed.set();
}
{
LOGGER.at(Level.FINEST).log(, );
.assetMonitor.removeHookChangeTask();
(.task != && !.task.isDone()) {
.task.cancel();
}
}
String {
String.valueOf(.parent);
+ var10000 + + String.valueOf(.handler) + + String.valueOf(.changed) + + String.valueOf(.paths) + ;
}
}