From bfe3a7fd82c32f4dcf658cf78f1c03b15d1fd4e4 Mon Sep 17 00:00:00 2001 From: chuzhongzai Date: Sun, 15 Sep 2024 00:08:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E9=99=86=E6=97=B6=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=9C=9F=E5=AE=9E=E5=8F=AF=E7=94=A8=E7=A9=BA=E9=97=B4=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E5=AD=98=E5=82=A8=E5=9C=A8=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E7=9A=84=E7=A9=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sns/configuration/BeanConfiguration.java | 2 +- .../lion/sns/controller/indexController.java | 2 +- .../com/lion/sns/message/AbstractMessage.java | 1 + .../com/lion/sns/message/MessageCodec.java | 1 + .../sns/message/StorageSpaceQueryMessage.java | 7 ++++ .../com/lion/sns/service/SiteService.java | 38 ++++++++++++++++--- 6 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/lion/sns/message/StorageSpaceQueryMessage.java diff --git a/src/main/java/com/lion/sns/configuration/BeanConfiguration.java b/src/main/java/com/lion/sns/configuration/BeanConfiguration.java index 6306670..7693931 100644 --- a/src/main/java/com/lion/sns/configuration/BeanConfiguration.java +++ b/src/main/java/com/lion/sns/configuration/BeanConfiguration.java @@ -15,7 +15,7 @@ import org.springframework.context.annotation.Configuration; ConnectMessage.class, DelayTestMessage.class, DynamicConfigMessage.class, ExtractFileMessage.class, FileOperateMessage.class, FileQueryMessage.class, FileResponseMessage.class, MoveFileRequestMessage.class, MoveFileResponseMessage.class, PairMessage.class, PairResultMessage.class, ResponseMessage.class, ShareFileMessage.class, ShareFileQueryMessage.class, TaskCancelMessage.class, TaskStatusMessage.class, UnPairMessage.class, FileNode.class, Progress.class, Record.class, ShareFile.class, ShareFileDownloadRecord.class, Site.class, Task.class, -User.class}) +User.class, StorageSpaceQueryMessage.class}) public class BeanConfiguration { // @Resource diff --git a/src/main/java/com/lion/sns/controller/indexController.java b/src/main/java/com/lion/sns/controller/indexController.java index 37e591a..19e4e01 100644 --- a/src/main/java/com/lion/sns/controller/indexController.java +++ b/src/main/java/com/lion/sns/controller/indexController.java @@ -46,7 +46,7 @@ public class indexController { @GetMapping("/getSites") @ResponseBody public String getSites(@SessionAttribute("id") Integer userid){ - return siteService.getSites(userid); + return userid == 1 ? siteService.getSites(): siteService.getSites(userid); } @GetMapping("/getFileByShareCode/**") diff --git a/src/main/java/com/lion/sns/message/AbstractMessage.java b/src/main/java/com/lion/sns/message/AbstractMessage.java index 0754294..12d0f9c 100644 --- a/src/main/java/com/lion/sns/message/AbstractMessage.java +++ b/src/main/java/com/lion/sns/message/AbstractMessage.java @@ -28,6 +28,7 @@ public class AbstractMessage { public static final int CONFIG_MESSAGE = 80; public static final int CONNECT_MESSAGE = 90; public static final int DELAY_TEST_MESSAGE = 91; + public static final int STORAGE_SPACE_QUERY_MESSAGE = 92; diff --git a/src/main/java/com/lion/sns/message/MessageCodec.java b/src/main/java/com/lion/sns/message/MessageCodec.java index 9692b9e..386048d 100644 --- a/src/main/java/com/lion/sns/message/MessageCodec.java +++ b/src/main/java/com/lion/sns/message/MessageCodec.java @@ -47,6 +47,7 @@ public class MessageCodec extends ByteToMessageCodec { case AbstractMessage.CONFIG_MESSAGE -> objectMapper.readValue(bytes, ConfigMessage.class); case AbstractMessage.CONNECT_MESSAGE -> objectMapper.readValue(bytes, ConnectMessage.class); case AbstractMessage.DELAY_TEST_MESSAGE -> objectMapper.readValue(bytes, DelayTestMessage.class); + case AbstractMessage.STORAGE_SPACE_QUERY_MESSAGE -> objectMapper.readValue(bytes, StorageSpaceQueryMessage.class); default -> throw new IllegalStateException("Unexpected value: " + type); }; diff --git a/src/main/java/com/lion/sns/message/StorageSpaceQueryMessage.java b/src/main/java/com/lion/sns/message/StorageSpaceQueryMessage.java new file mode 100644 index 0000000..c5d29a9 --- /dev/null +++ b/src/main/java/com/lion/sns/message/StorageSpaceQueryMessage.java @@ -0,0 +1,7 @@ +package com.lion.sns.message; + +public class StorageSpaceQueryMessage extends AbstractMessage{ + { + messageType = AbstractMessage.STORAGE_SPACE_QUERY_MESSAGE; + } +} diff --git a/src/main/java/com/lion/sns/service/SiteService.java b/src/main/java/com/lion/sns/service/SiteService.java index 613fcda..6ff6fe9 100644 --- a/src/main/java/com/lion/sns/service/SiteService.java +++ b/src/main/java/com/lion/sns/service/SiteService.java @@ -6,10 +6,7 @@ import com.lion.sns.ScalableNetworkStorageApplication; import com.lion.sns.dao.CustomConfigurationMapper; import com.lion.sns.dao.ShareFileMapper; import com.lion.sns.dao.SiteMapper; -import com.lion.sns.message.ConfigMessage; -import com.lion.sns.message.DelayTestMessage; -import com.lion.sns.message.ResponseMessage; -import com.lion.sns.message.UnPairMessage; +import com.lion.sns.message.*; import com.lion.sns.pojo.ShareFile; import com.lion.sns.pojo.Site; import com.lion.sns.pojo.User; @@ -22,6 +19,9 @@ import java.io.IOException; import java.net.Inet4Address; import java.util.ArrayList; import java.util.Arrays; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @Service @@ -159,7 +159,35 @@ public class SiteService { public String getSites() { Response response = new Response(); ArrayList sites = siteMapper.selectAllSite(); - + try(ExecutorService executorService = Executors.newFixedThreadPool(sites.size() - 1)) { + sites.forEach(site -> { + //直接查本地空间 + if (site.getId() == 1) { + File file = new File(site.getStoragePath()); + site.setAvailableSpace(file.getFreeSpace()); + site.setTotalSpace(file.getTotalSpace()); + } else { + //查询远程节点空间 + executorService.submit(() -> { + //判断节点是否在线 + if(communicateService.sessions.containsKey(site.getId())) { + System.out.println("查询id" + site.getId() + "的存储空间"); + ResponseMessage responseMessage = communicateService.sendMessageToSite(site.getId(), new StorageSpaceQueryMessage()); + if (responseMessage.isResult()) { + System.out.println("查询id" + site.getId() + "成功"); + System.out.println(responseMessage.getData().toString()); + site.setAvailableSpace(Long.parseLong(responseMessage.get("availableSpace"))); + site.setTotalSpace(Long.parseLong(responseMessage.get("totalSpace"))); + } else { + System.out.println("查询id" + site.getId() + "失败"); + } + } + }); + } + }); + executorService.shutdown(); + executorService.awaitTermination(10, TimeUnit.SECONDS); + } catch (Exception ignored) {} response.success(objectMapper.valueToTree(sites)); return response.toJSONString(); }