Warning: session_start(): open(/var/lib/php/sessions/sess_mu7v5j93ugrl8rrtq9nil1grtv, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
import java.nio.file.*;
import static java.nio.file.StandardWatchEventKinds.*;
sclass FileWatchService implements AutoCloseable {
int interval = 50; // larger interval helps show less duplicate events (https://stackoverflow.com/questions/16777869/java-7-watchservice-ignoring-multiple-occurrences-of-the-same-event/34818620#34818620)
double sleepSeconds = 60; // any drawback to this being very high? not sure
WatchService watchService;
new MultiMap> listeners;
Thread pollThread;
*() ctex {
watchService = FileSystems.getDefault().newWatchService();
}
public void close { dispose watchService; }
WatchKey addListener(File path, IVF1 listener, WatchEvent.Kind... eventKinds) ctex {
startPollThread();
WatchKey key = path.toPath().register(watchService, eventKinds);
listeners.put(key, listener);
ret key;
}
void addRecursiveListener(File path, IVF1 listener) {
Set listeningTo = synchroSet();
IVF1 listener2 = new IVF1 {
public void get(File f) {
// TODO: remove listeners on deleted directory
bool isDir = f.isDirectory();
if (isDir && listeningTo.add(f)) pcall-short {
addListener(f, this, jdk_watchService_allEventKinds());
}
callF(listener, f);
}
};
addListener(path, listener2, jdk_watchService_allEventKinds());
for (File subDir : findAllDirs(path))
addListener(subDir, listener2, jdk_watchService_allEventKinds());
}
synchronized void startPollThread() {
if (pollThread != null) ret;
pollThread = startThread("File Watch Service", r {
while licensed {
WatchKey key = watchService.poll(sleepSeconds, TimeUnit.SECONDS);
if (key != null) {
Path dir = cast key.watchable();
sleep(interval);
L> events = key.pollEvents();
new LinkedHashSet changedFiles;
for (WatchEvent> event : reversedIterator(events)) pcall {
final Path changed = (Path) event.context();
File full = newFile(dir.toFile(), changed.toFile().getPath());
changedFiles.add(full);
//print("WatchService Changed: " + full + ", " + event.kind());
}
for (File f : changedFiles)
pcallFAll(listeners.get(key), f);
key.reset();
}
}
});
}
}