tTorrent Java:跟踪目录中的新torrent文件

时间:2018-06-03 09:36:15

标签: java bittorrent

我正在使用BitTorrent协议的tTorrent Java实现。我正处于我必须处理Tracker的地步。来自官方存储库的示例代码从给定目录加载torrent文件并将其通告给跟踪器。然后,启动它。我希望跟踪器会自动在目录中查找新的torrent文件,但似乎没有这样做。

我拉了一个DirectoryWatcher并听了create事件;过滤种子文件。通过Tracker对象的引用,我可以宣布新文件,但它似乎没有做任何事情。

如何让跟踪器在目录运行时知道目录中可能有新的torrent文件?

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();
    }
}

0 个答案:

没有答案