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(); }