添加bt与tracker交互
Change-Id: I1327c2ed89a76bee8e2abeb8cb3014b56357689a
diff --git a/src/main/java/com/pt/controller/ResourceController.java b/src/main/java/com/pt/controller/ResourceController.java
index 8e08e16..411e7bc 100644
--- a/src/main/java/com/pt/controller/ResourceController.java
+++ b/src/main/java/com/pt/controller/ResourceController.java
@@ -9,6 +9,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
@@ -60,11 +61,14 @@
}
@PostMapping("/publish")
- public ResponseEntity<?> publishResource(@RequestHeader("token") String token,
- @RequestParam("username") String username,
- @RequestParam("size") double size,
- @RequestParam("name") String name,
- @RequestParam("description") String description) {
+ public ResponseEntity<?> publishResource(
+ @RequestHeader("token") String token,
+ @RequestParam("username") String username,
+ @RequestParam("size") double size,
+ @RequestParam("name") String name,
+ @RequestParam("description") String description,
+ @RequestParam("torrent") MultipartFile torrentFile) {
+
Map<String, Object> ans = new HashMap<>();
if (!JWTUtils.checkToken(token, username, Constants.UserRole.USER)) {
@@ -79,7 +83,8 @@
}
try {
- resourceService.publishResource(name, description, username, size);
+ // 传入种子文件字节,同时传入资源其他信息
+ resourceService.publishResource(name, description, username, size, torrentFile.getBytes());
} catch (Exception e) {
ans.put("result", "Failed to publish resource: " + e.getMessage());
return ResponseEntity.status(500).body(ans);
@@ -91,6 +96,7 @@
+
@GetMapping("/get/{resourceId}")
public ResponseEntity<?> getResourceById(@PathVariable("resourceId") int resourceId,
@RequestHeader("token") String token,
diff --git a/src/main/java/com/pt/controller/TrackerController.java b/src/main/java/com/pt/controller/TrackerController.java
new file mode 100644
index 0000000..1e0302d
--- /dev/null
+++ b/src/main/java/com/pt/controller/TrackerController.java
@@ -0,0 +1,36 @@
+package com.pt.controller;
+
+import com.pt.service.TrackerService;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.Map;
+
+@RestController
+public class TrackerController {
+
+ @Autowired
+ private TrackerService trackerService;
+
+ @GetMapping("/announce")
+ public void announce(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ try {
+ String ip = request.getRemoteAddr();
+ Map<String, String[]> params = request.getParameterMap();
+
+ byte[] bencodedResponse = trackerService.handleAnnounce(params, ip);
+
+ response.setContentType("application/x-bittorrent");
+ response.getOutputStream().write(bencodedResponse);
+ } catch (Exception e) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ response.setContentType("text/plain");
+ response.getWriter().write("Tracker internal error: " + e.getMessage());
+ }
+ }
+
+}
+