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 + "}";
   }
}