tTorrent Java: отслеживание новых торрент-файлов в каталоге - PullRequest
0 голосов
/ 03 июня 2018

Я использую реализацию tTorrent Java протокола BitTorrent.Я нахожусь в точке, где мне приходится иметь дело с Tracker.Пример кода из официального репозитория загружает торрент-файлы из заданного каталога и сообщает о них трекеру.Затем запускается.Я надеялся, что трекер будет автоматически искать новые торрент-файлы в каталоге, но, похоже, он этого не делает.

Я включил DirectoryWatcher и прослушал событие create;фильтрация торрент файлов.Передав ссылку на объект Tracker, я могу объявить новый файл, но, похоже, он ничего не делает.

Как я могу заставить трекер узнавать о возможных новых торрент-файлах в каталоге во время его работы?

DirectoryAwareTracker.java

import com.turn.ttorrent.tracker.TrackedTorrent;
import com.turn.ttorrent.tracker.Tracker;
import io.methvin.watcher.DirectoryChangeEvent;
import io.methvin.watcher.DirectoryChangeListener;
import io.methvin.watcher.DirectoryWatcher;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.file.Path;

public class DirectoryAwareTracker extends Tracker {
    private DirectoryWatcher watcher;

    private static final FilenameFilter torrentFilenameFilter = new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.endsWith(".torrent");
        }
    };

    DirectoryAwareTracker(InetSocketAddress address, Path directoryToWatch) throws IOException {
        super(address);

        File parent = new File(".");
        for (File f : parent.listFiles(torrentFilenameFilter)) {
            System.out.println("Loading torrent from " + f.getName());
            try {
                announce(TrackedTorrent.load(f));
            } catch (Exception e) {

            }
        }

        System.out.println("Starting tracker with {} announced torrents..." + getTrackedTorrents().size());

        start();

        watcher = DirectoryWatcher.create(directoryToWatch, new DirectoryChangeListener() {
            @Override
            public void onEvent(DirectoryChangeEvent directoryChangeEvent) throws IOException {
                switch (directoryChangeEvent.eventType()) {
                    case CREATE:
                        File newFile = new File(directoryChangeEvent.path().toString());
                        System.out.println(directoryChangeEvent.path().toString());
                        System.out.println(newFile.isFile());
                        System.out.println(newFile.getName().endsWith(".torrent"));
                        if (newFile.isFile() && newFile.getName().endsWith(".torrent")) {
                            try {
                                announce(TrackedTorrent.load(newFile));
                            } catch (Exception e) {

                            }
                        }
                        break;
                }
            }
        });
    }

    public void stopWatching() {
        try {
            watcher.close();
        }
        catch(Exception e) { }
    }

    public void watch() {
        watcher.watch();
    }
}
...