FileChangeTask class
Пакет: com.hypixel.hytale.server.core.asset.monitor
Файл: com/hypixel/hytale/server/core/asset/monitor/FileChangeTask.java
implements: Runnable
Поля (8)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
HytaleLogger |
LOGGER |
|
|
return |
|
|
return |
|
BasicFileAttributes |
var1 |
|
long |
var2 |
|
long |
var4 |
|
|
var4 |
|
BasicFileAttributes |
var6 |
Методы (5)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
void |
cancelSchedulevoid cancelSchedule() |
public |
AssetMonitor |
getAssetMonitorAssetMonitor getAssetMonitor() |
|
|
if if(this.createdOrModified) |
|
|
if if(this.createdOrModified) |
|
|
if if(var2 > this.lastSize) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.asset.monitor;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.logger.sentry.SkipSentryException;
class="kw">import java.io.FileNotFoundException;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.NoSuchFileException;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.attribute.BasicFileAttributes;
class="kw">import java.util.concurrent.ScheduledFuture;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">public class FileChangeTask 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 FILE_SIZE_CHECK_DELAY_MILLIS = 200L;
class="kw">private class="kw">final AssetMonitor assetMonitor;
@Nonnull
class="kw">private class="kw">final Path path;
@Nonnull
class="kw">private class="kw">final PathEvent pathEvent;
class="kw">private class="kw">final boolean createdOrModified;
@Nonnull
class="kw">private class="kw">final ScheduledFuture<?> task;
class="kw">private long lastSize;
class="kw">public FileChangeTask(AssetMonitor var1, @Nonnull Path var2, @Nonnull PathEvent var3) class="kw">throws IOException {
this.assetMonitor = var1;
this.path = var2;
this.pathEvent = var3;
this.createdOrModified = var3.getEventKind() == EventKind.ENTRY_CREATE || var3.getEventKind() == EventKind.ENTRY_MODIFY;
long var4 = 0L;
if (this.createdOrModified) {
BasicFileAttributes var6 = Files.readAttributes(var2, BasicFileAttributes.class);
if (!var6.isDirectory()) {
var4 = var6.size();
}
}
this.lastSize = var4;
this.task = AssetMonitor.runTask(this, 200L);
}
class="kw">public AssetMonitor getAssetMonitor() {
class="kw">return this.assetMonitor;
}
@Nonnull
class="kw">public Path getPath() {
class="kw">return this.path;
}
@Nonnull
class="kw">public PathEvent getPathEvent() {
class="kw">return this.pathEvent;
}
@Override
class="kw">public void run() {
try {
if (this.createdOrModified) {
if (!Files.exists(this.path)) {
LOGGER.at(Level.WARNING).log("The asset file '%s' was deleted before we could load/update it!", this.path);
this.cancelSchedule();
class="kw">return;
}
BasicFileAttributes var1 = Files.readAttributes(this.path, BasicFileAttributes.class);
if (!var1.isDirectory()) {
long var2 = var1.size();
if (var2 > this.lastSize) {
LOGGER.at(Level.FINEST).log("File increased in size: %s, %s, %d > %d", this.path, this.pathEvent, var2, this.lastSize);
this.lastSize = var2;
this.assetMonitor.markChanged(this.path);
class="kw">return;
}
}
}
this.cancelSchedule();
this.assetMonitor.onDelayedChange(this.path, this.pathEvent);
} catch (NoSuchFileException | FileNotFoundException var4) {
((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(new SkipSentryException(var4)))
.log("The asset file '%s' was deleted before we could load/update it!", this.path);
} catch (Throwable var5) {
((HytaleLogger.Api)LOGGER.at(Level.SEVERE).withCause(var5)).log("Failed to handle file change %s", this.path);
}
}
class="kw">public void cancelSchedule() {
LOGGER.at(Level.FINEST).log("cancelSchedule(): %s", this);
this.assetMonitor.removeFileChangeTask(this);
if (this.task != null && !this.task.isDone()) {
this.task.cancel(false);
}
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "FileChangeTask{path=" + this.path + ", pathEvent=" + this.pathEvent + ", lastSize=" + this.lastSize + "}";
}
}