大概就把语言系统做完了

This commit is contained in:
Izzel_Aliz
2018-04-28 14:00:12 +08:00
parent 93e84b1b80
commit f40039f9ce
12 changed files with 188 additions and 148 deletions

View File

@@ -1,12 +1,10 @@
package com.ilummc.tlib.inject;
import org.apache.commons.lang3.tuple.Triple;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.nio.file.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@@ -15,39 +13,46 @@ import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import org.apache.commons.lang3.tuple.Triple;
public class TConfigWatcher {
private ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
private final ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
private Map<WatchService, Triple<File, Object, Consumer<Object>>> map = new HashMap<>();
private final Map<WatchService, Triple<File, Object, Consumer<Object>>> map = new HashMap<>();
public TConfigWatcher() {
service.scheduleAtFixedRate(() -> {
map.forEach((service, triple) -> {
WatchKey key;
while ((key = service.poll()) != null) {
for (WatchEvent<?> watchEvent : key.pollEvents()) {
if (triple.getLeft().getName().equals(Objects.toString(watchEvent.context())))
triple.getRight().accept(triple.getMiddle());
}
key.reset();
service.scheduleAtFixedRate(() -> map.forEach((service, triple) -> {
WatchKey key;
while ((key = service.poll()) != null) {
for (WatchEvent<?> watchEvent : key.pollEvents()) {
if (triple.getLeft().getName().equals(Objects.toString(watchEvent.context())))
triple.getRight().accept(triple.getMiddle());
}
});
}, 1000, 100, TimeUnit.MILLISECONDS);
key.reset();
}
}), 1000, 100, TimeUnit.MILLISECONDS);
}
public void addOnListen(File file, Object obj, Consumer<Object> consumer) {
try {
WatchService service = FileSystems.getDefault().newWatchService();
file.getParentFile().toPath().register(service, StandardWatchEventKinds.ENTRY_MODIFY);
map.put(service, Triple.of(file, obj, consumer));
map.putIfAbsent(service, Triple.of(file, obj, consumer));
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public <T> void addListener(File file, T obj, Consumer<T> consumer) {
addOnListen(file, obj, (Consumer<Object>) consumer);
}
public void removeListener(File file) {
synchronized (map) {
map.entrySet().removeIf(entry -> entry.getValue().getLeft().equals(file));
}
}
public void unregisterAll() {
service.shutdown();
map.forEach((service, pair) -> {