upload功能
Change-Id: Iad725ce3e2edd913531bf11705bf51000dde010d
diff --git a/src/main/java/com/pt5/pthouduan/config/TrackerConfig.java b/src/main/java/com/pt5/pthouduan/config/TrackerConfig.java
new file mode 100644
index 0000000..93784b5
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/config/TrackerConfig.java
@@ -0,0 +1,93 @@
+package com.pt5.pthouduan.config;
+
+import com.pt5.pthouduan.entity.StatsRecorder;
+import com.pt5.pthouduan.entity.TrackerInitializer;
+import com.pt5.pthouduan.entity.TrackeredTorrentWithStats;
+import com.pt5.pthouduan.service.impl.updatePeerStatsService;
+import com.turn.ttorrent.tracker.TorrentsRepository;
+import com.turn.ttorrent.tracker.TrackedTorrent;
+import com.turn.ttorrent.tracker.Tracker;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+
+import org.springframework.beans.factory.annotation.Value;
+
+import javax.sql.DataSource;
+
+@Configuration
+public class TrackerConfig {
+
+ @Value("${tracker.port:6969}")
+ private int trackerPort;
+
+ @Value("${tracker.accept.foreign:false}")
+ private boolean acceptForeignTorrents;
+
+ @Autowired
+ private DataSource dataSource;
+ @Autowired
+ private TrackerInitializer trackerInitializer;
+ @Autowired
+ private updatePeerStatsService statsService;
+
+ @Bean
+ public Tracker tracker() throws IOException {
+ // 1. 创建 Tracker 实例
+ //Tracker tracker = new Tracker(6969);
+ //Tracker tracker = new Tracker(6969,"127.0.0.1");
+ Tracker tracker = trackerInitializer.createTracker();
+ // 4. 启动 Tracker(true 表示作为守护线程运行)
+ tracker.start(true);
+
+ // 2. 自动加载目录下的所有种子文件
+ File torrentsDirectory = new File("D:\\torrenttest\\111111");
+ if (torrentsDirectory.exists() && torrentsDirectory.isDirectory()) {
+ FilenameFilter filter = (dir, name) -> name.endsWith(".torrent");
+
+ for (File torrentFile : torrentsDirectory.listFiles(filter)) {
+ try {
+ TrackedTorrent baseTorrent = TrackedTorrent.load(torrentFile);
+ //获取HashInfo
+ byte[] infoHash = baseTorrent.getInfoHash();
+ System.out.println("Registered torrent hash: " + infoHash);
+ System.out.println("Registered torrent hash: " + baseTorrent.getHexInfoHash());
+ TrackeredTorrentWithStats trackedTorrentWithStats = new TrackeredTorrentWithStats(infoHash,dataSource,"",statsService);
+ tracker.announce(trackedTorrentWithStats);
+ //tracker.announce(TrackedTorrent.load(torrentFile));
+ System.out.println("Registered torrent: " + torrentFile.getName());
+ } catch (IOException e) {
+ System.err.println("Failed to load torrent: " + torrentFile.getName());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ // 3. 设置是否接受未知种子
+ tracker.setAcceptForeignTorrents(true);
+
+
+
+ System.out.println("Tracker started on port " + trackerPort +
+ ", accepting foreign torrents: " + acceptForeignTorrents);
+
+ // 添加JVM关闭钩子确保Tracker正常停止
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ tracker.stop();
+ System.out.println("Tracker stopped gracefully");
+ }));
+
+ System.out.println("All registered torrents:");
+ for (TrackedTorrent t : tracker.getTrackedTorrents()) {
+ System.out.println(t.getHexInfoHash());
+ }
+
+
+ return tracker;
+ }
+
+}
\ No newline at end of file