完成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){
diff --git a/src/main/java/tracker/TrackerInterface.java b/src/main/java/tracker/TrackerInterface.java
index 1496a26..4776d11 100644
--- a/src/main/java/tracker/TrackerInterface.java
+++ b/src/main/java/tracker/TrackerInterface.java
@@ -11,8 +11,8 @@
     public boolean AddMagic(String userid,int magic);//给用户增加魔力值,返回0成功,返回1失败;
     public boolean ReduceMagic(String userid,int magic);//给用户减少魔力值,返回0成功,返回1失败;
 
-    public int SaveTorrent(File TTorent);//保存seedid对应的ttorent信息
-    public File GetTTorent(String seedid,String userid);//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
+    public int SaveTorrent(String seedid,File TTorent);//保存seedid对应的ttorent信息
+    public File GetTTorent(String seedid,String userid,String ip);//根据种子id获得ttorent信息然后构建Ttorent文件并返回,同时记录用户的下载行为
     
     public int AddRecord(TransRecord rd);//新增一个seedid对应的种子的传输任务记录
 }
\ No newline at end of file