DirectoryHandlerChangeTask class
Пакет: com.hypixel.hytale.server.core.asset.monitor
Файл: com/hypixel/hytale/server/core/asset/monitor/DirectoryHandlerChangeTask.java
implements: Runnable
Поля (7)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
ObjectArrayList |
var1 |
|
ObjectListIterator |
var4 |
|
Entry |
var5 |
|
Set |
var7 |
|
Map |
var8 |
|
|
var8 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
addPathvoid addPath(Path var1, PathEvent var2) |
public |
void |
cancelSchedulevoid cancelSchedule() |
public |
AssetMonitor |
getAssetMonitorAssetMonitor getAssetMonitor() |
public |
AssetMonitorHandler |
getHandlerAssetMonitorHandler getHandler() |
public |
Path |
getParentPath getParent() |
public |
void |
markChangedvoid markChanged() |
public |
void |
removePathvoid removePath(Path var1) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.monitor;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.nio.file.Path;
class="kw">import java.util.Comparator;
class="kw">import java.util.HashSet;
class="kw">import java.util.Map;
class="kw">import java.util.Set;
class="kw">import java.util.AbstractMap.SimpleEntry;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.concurrent.ScheduledFuture;
class="kw">import java.util.concurrent.atomic.AtomicBoolean;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class DirectoryHandlerChangeTask class="kw">implements Runnable {
class="kw">public class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
class="kw">private class="kw">static class="kw">final long ACCUMULATION_DELAY_MILLIS = 1000L;
class="kw">private class="kw">final AssetMonitor assetMonitor;
class="kw">private class="kw">final Path parent;
class="kw">private class="kw">final AssetMonitorHandler handler;
@Nonnull
class="kw">private class="kw">final ScheduledFuture<?> task;
class="kw">private class="kw">final AtomicBoolean changed = new AtomicBoolean(true);
class="kw">private class="kw">final Map<Path, PathEvent> paths = new ConcurrentHashMap<>();
class="kw">public DirectoryHandlerChangeTask(AssetMonitor var1, Path var2, AssetMonitorHandler var3) {
this.assetMonitor = var1;
this.parent = var2;
this.handler = var3;
this.task = AssetMonitor.runTask(this, 1000L);
}
@Override
class="kw">public void run() {
if (!this.changed.getAndSet(false)) {
this.cancelSchedule();
try {
LOGGER.at(Level.FINER).log("run: %s", this.paths);
ObjectArrayList var1 = new ObjectArrayList(this.paths.size());
for (Entry var3 : this.paths.entrySet()) {
var1.add(new SimpleEntry<>(var3.getKey(), var3.getValue()));
}
this.paths.clear();
var1.sort(Comparator.comparingLong(var0 -> ((PathEvent)var0.getValue()).getTimestamp()));
Set var7 = new HashSet<>();
Map var8 = new Object2ObjectOpenHashMap();
ObjectListIterator var4 = var1.iterator();
while (var4.hasNext()) {
Entry var5 = (Entry<Path, PathEvent>)var4.next();
if (!var7.add(var5.getKey().getFileName().toString())) {
LOGGER.at(Level.FINER).log("run handler.accept(%s)", var8);
this.handler.accept(var8);
var8 = new Object2ObjectOpenHashMap();
var7.clear();
}
var8.put(var5.getKey(), var5.getValue().getEventKind());
}
if (!var8.isEmpty()) {
LOGGER.at(Level.FINER).log("run handler.accept(%s)", var8);
this.handler.accept(var8);
}
} catch (Exception var6) {
((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var6)).log("Failed to run: %s", this);
}
}
}
class="kw">public AssetMonitor getAssetMonitor() {
class="kw">return this.assetMonitor;
}
class="kw">public Path getParent() {
class="kw">return this.parent;
}
class="kw">public AssetMonitorHandler getHandler() {
class="kw">return this.handler;
}
class="kw">public void addPath(Path var1, PathEvent var2) {
LOGGER.at(Level.FINEST).log("addPath(%s, %s): %s", var1, var2, this);
this.paths.put(var1, var2);
this.changed.set(true);
}
class="kw">public void removePath(Path var1) {
LOGGER.at(Level.FINEST).log("removePath(%s): %s", var1, this);
this.paths.remove(var1);
if (this.paths.isEmpty()) {
this.cancelSchedule();
} else {
this.changed.set(true);
}
}
class="kw">public void markChanged() {
AssetMonitor.LOGGER.at(Level.FINEST).log("markChanged(): %s", this);
this.changed.set(true);
}
class="kw">public void cancelSchedule() {
LOGGER.at(Level.FINEST).log("cancelSchedule(): %s", this);
this.assetMonitor.removeHookChangeTask(this);
if (this.task != null && !this.task.isDone()) {
this.task.cancel(false);
}
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "DirectoryHandlerChangeTask{parent=" + this.parent + ", handler=" + this.handler + ", changed=" + this.changed + ", paths=" + this.paths + "}";
}
}