登陆时查询真实可用空间而不是存储在数据库的空间

This commit is contained in:
chuzhongzai 2024-09-15 00:08:43 +08:00
parent 40b52013b7
commit bfe3a7fd82
6 changed files with 44 additions and 7 deletions

View File

@ -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

View File

@ -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/**")

View File

@ -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;

View File

@ -47,6 +47,7 @@ public class MessageCodec extends ByteToMessageCodec<AbstractMessage> {
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);
};

View File

@ -0,0 +1,7 @@
package com.lion.sns.message;
public class StorageSpaceQueryMessage extends AbstractMessage{
{
messageType = AbstractMessage.STORAGE_SPACE_QUERY_MESSAGE;
}
}

View File

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