完成Tracker.java接口开发,update path
Change-Id: I8b1096af3aa3c7ebdf623905c5d47cfe72b86da2
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 6334ebb..210b9bf 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,20 +1,24 @@
package tracker;
import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
import java.util.HashMap;
import java.util.Map;
-
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
-
import com.querydsl.jpa.impl.JPAUpdateClause;
-
import entity.QUserPT;
-import entity.TTorent;
+import entity.Seed;
+import entity.SeedDownload;
import entity.TransRecord;
import entity.config;
+import entity.TTorent;
+import java.time.LocalDateTime;
public class Tracker implements TrackerInterface {
private final EntityManagerFactory emf;
@@ -163,17 +167,69 @@
}
}
+ @Override
+ public int SaveTorrent(String seedid, File TTorent){
+ try {
+ Path storageDir = Paths.get(config.TORRENT_STORAGE_DIR);
+ if (!Files.exists(storageDir)) {
+ Files.createDirectories(storageDir);
+ }
+ String filename = TTorent.getName();
+ Path target = storageDir.resolve(seedid + "_" + filename);
+ Files.copy(TTorent.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
+
+ EntityManager em = emf.createEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ try {
+ tx.begin();
+ Seed seed = em.find(Seed.class, seedid);
+ seed.url = target.toString();
+ em.merge(seed);
+ tx.commit();
+ return 0;
+ } catch (Exception e) {
+ if (tx.isActive()) tx.rollback();
+ return 1;
+ } finally {
+ em.close();
+ }
+ } catch (Exception e) {
+ return 1;
+ }
+ }
@Override
- public int SaveTorrent(File TTorent){
- return 0;
- };//保存seedid对应的ttorent信息
-
- @Override
- public File GetTTorent(String seedid,String userid){
- return null;
- };//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
-
+ public File GetTTorent(String seedid, String userid, String ip) {
+ EntityManager em = emf.createEntityManager();
+ EntityTransaction tx = em.getTransaction();
+ File file = null;
+ try {
+ Seed seed = em.find(Seed.class, seedid);
+ if (seed == null || seed.url == null) {
+ return null;
+ }
+ file = new File(seed.url);
+ if (!file.exists()) {
+ return null;
+ }
+ tx.begin();
+ SeedDownload sd = new SeedDownload();
+ sd.seedId = seedid;
+ sd.userId = userid;
+ sd.clientIp = ip;
+ LocalDateTime now = LocalDateTime.now();
+ sd.downloadStart = now;
+ sd.downloadEnd = now;
+ em.persist(sd);
+ tx.commit();
+ } catch (Exception e) {
+ if (tx.isActive()) tx.rollback();
+ // ignore persistence errors and still return the file
+ } finally {
+ em.close();
+ }
+ return file;
+ }
@Override
public int AddRecord(TransRecord rd){