diff --git a/.idea/misc.xml b/.idea/misc.xml index fdc35ea..d7be3bf 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - @@ -8,7 +7,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 991eb7f..ef591ed 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,8 @@ 1.0 - 21 - 21 + 17 + 17 UTF-8 @@ -61,32 +61,55 @@ - org.graalvm.buildtools - native-maven-plugin - 0.9.28 + org.apache.maven.plugins + maven-assembly-plugin + 3.4.2 - native - - compile-no-fork - package + + single + - lion.Main - storageNode - false - true - true - - -H:+ReportExceptionStackTraces - - - true - + + jar-with-dependencies + + + + lion.Main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/lion/CustomUtil.java b/src/main/java/lion/CustomUtil.java new file mode 100644 index 0000000..4f176da --- /dev/null +++ b/src/main/java/lion/CustomUtil.java @@ -0,0 +1,34 @@ +package lion; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Data; + +import java.io.IOException; +import java.net.ServerSocket; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +@Data +public class CustomUtil { + + public static AtomicInteger counter = new AtomicInteger(); + + /** + * 寻找一定数量的可用端口 + * + * @return 可用端口的起始位置 -1为没有(几乎没有可能) + */ + public static short _findIdlePort(){ + for(int i=20000; i<65535; i++){ + try(ServerSocket ignored = new ServerSocket(i)){ + return (short) i; + }catch (IOException ignored) { + } + } + return -1; + } +} diff --git a/src/main/java/lion/Message/AbstractMessage.java b/src/main/java/lion/Message/AbstractMessage.java index 1bc8836..c0e4d27 100644 --- a/src/main/java/lion/Message/AbstractMessage.java +++ b/src/main/java/lion/Message/AbstractMessage.java @@ -18,6 +18,8 @@ public class AbstractMessage { public static final byte MAINTAIN_MESSAGE = 7; + public static final byte FILE_TRANSFER_MESSAGE = 8; + public static final byte GALLERY_REQUEST_MESSAGE = 101; public byte messageType; diff --git a/src/main/java/lion/Message/Acclerator/FileTransferMessage.java b/src/main/java/lion/Message/Acclerator/FileTransferMessage.java new file mode 100644 index 0000000..0804794 --- /dev/null +++ b/src/main/java/lion/Message/Acclerator/FileTransferMessage.java @@ -0,0 +1,14 @@ +package lion.Message.Acclerator; + +import lion.Message.AbstractMessage; +import lombok.Data; + +@Data +public class FileTransferMessage extends AbstractMessage { + { + messageType = FILE_TRANSFER_MESSAGE; + } + String filename; + int port; + boolean isThumbnail; +} diff --git a/src/main/java/lion/Message/lombok.config b/src/main/java/lion/Message/Acclerator/lombok.config similarity index 100% rename from src/main/java/lion/Message/lombok.config rename to src/main/java/lion/Message/Acclerator/lombok.config diff --git a/src/main/java/lion/Message/IdentityMessage.java b/src/main/java/lion/Message/IdentityMessage.java deleted file mode 100644 index ad97153..0000000 --- a/src/main/java/lion/Message/IdentityMessage.java +++ /dev/null @@ -1,10 +0,0 @@ -package lion.Message; - -import lombok.Data; - -@Data -public class IdentityMessage extends AbstractMessage{ - { - messageType = IDENTITY_MESSAGE; - } -} diff --git a/src/main/java/lion/Message/DeleteGalleryMessage.java b/src/main/java/lion/Message/Main/DeleteGalleryMessage.java similarity index 69% rename from src/main/java/lion/Message/DeleteGalleryMessage.java rename to src/main/java/lion/Message/Main/DeleteGalleryMessage.java index af1acd1..26cd6be 100644 --- a/src/main/java/lion/Message/DeleteGalleryMessage.java +++ b/src/main/java/lion/Message/Main/DeleteGalleryMessage.java @@ -1,9 +1,10 @@ -package lion.Message; +package lion.Message.Main; +import lion.Message.AbstractMessage; import lombok.Data; @Data -public class DeleteGalleryMessage extends AbstractMessage{ +public class DeleteGalleryMessage extends AbstractMessage { { messageType = DELETE_GALLERY_MESSAGE; } diff --git a/src/main/java/lion/Message/DownloadPostMessage.java b/src/main/java/lion/Message/Main/DownloadPostMessage.java similarity index 54% rename from src/main/java/lion/Message/DownloadPostMessage.java rename to src/main/java/lion/Message/Main/DownloadPostMessage.java index da1f30d..dd14aa0 100644 --- a/src/main/java/lion/Message/DownloadPostMessage.java +++ b/src/main/java/lion/Message/Main/DownloadPostMessage.java @@ -1,10 +1,11 @@ -package lion.Message; +package lion.Message.Main; import lion.Domain.GalleryTask; +import lion.Message.AbstractMessage; import lombok.Data; @Data -public class DownloadPostMessage extends AbstractMessage{ +public class DownloadPostMessage extends AbstractMessage { { messageType = DOWNLOAD_POST_MESSAGE; } diff --git a/src/main/java/lion/Message/DownloadStatusMessage.java b/src/main/java/lion/Message/Main/DownloadStatusMessage.java similarity index 55% rename from src/main/java/lion/Message/DownloadStatusMessage.java rename to src/main/java/lion/Message/Main/DownloadStatusMessage.java index 32fab14..c16fd10 100644 --- a/src/main/java/lion/Message/DownloadStatusMessage.java +++ b/src/main/java/lion/Message/Main/DownloadStatusMessage.java @@ -1,10 +1,11 @@ -package lion.Message; +package lion.Message.Main; import lion.Domain.GalleryTask; +import lion.Message.AbstractMessage; import lombok.Data; @Data -public class DownloadStatusMessage extends AbstractMessage{ +public class DownloadStatusMessage extends AbstractMessage { GalleryTask[] galleryTasks; { diff --git a/src/main/java/lion/Message/GalleryPageQueryMessage.java b/src/main/java/lion/Message/Main/GalleryPageQueryMessage.java similarity index 71% rename from src/main/java/lion/Message/GalleryPageQueryMessage.java rename to src/main/java/lion/Message/Main/GalleryPageQueryMessage.java index 1f86d72..c51b0b6 100644 --- a/src/main/java/lion/Message/GalleryPageQueryMessage.java +++ b/src/main/java/lion/Message/Main/GalleryPageQueryMessage.java @@ -1,10 +1,11 @@ -package lion.Message; +package lion.Message.Main; import com.fasterxml.jackson.annotation.JsonInclude; +import lion.Message.AbstractMessage; import lombok.Data; @Data -public class GalleryPageQueryMessage extends AbstractMessage{ +public class GalleryPageQueryMessage extends AbstractMessage { { messageType = GALLERY_PAGE_QUERY_MESSAGE; } diff --git a/src/main/java/lion/Message/GalleryRequestMessage.java b/src/main/java/lion/Message/Main/GalleryRequestMessage.java similarity index 72% rename from src/main/java/lion/Message/GalleryRequestMessage.java rename to src/main/java/lion/Message/Main/GalleryRequestMessage.java index 22085dd..470771e 100644 --- a/src/main/java/lion/Message/GalleryRequestMessage.java +++ b/src/main/java/lion/Message/Main/GalleryRequestMessage.java @@ -1,10 +1,11 @@ -package lion.Message; +package lion.Message.Main; +import lion.Message.AbstractMessage; import lombok.Data; @Data //请求预览/压缩包 -public class GalleryRequestMessage extends AbstractMessage{ +public class GalleryRequestMessage extends AbstractMessage { public static final byte SOURCE = 1; public static final byte PREVIEW = 2; diff --git a/src/main/java/lion/Message/Main/IdentityMessage.java b/src/main/java/lion/Message/Main/IdentityMessage.java new file mode 100644 index 0000000..f2c2d27 --- /dev/null +++ b/src/main/java/lion/Message/Main/IdentityMessage.java @@ -0,0 +1,12 @@ +package lion.Message.Main; + +import lion.Message.AbstractMessage; +import lombok.Data; + +@Data +public class IdentityMessage extends AbstractMessage { + { + messageType = IDENTITY_MESSAGE; + } + String identity; +} diff --git a/src/main/java/lion/Message/Main/MaintainMessage.java b/src/main/java/lion/Message/Main/MaintainMessage.java new file mode 100644 index 0000000..30ffc97 --- /dev/null +++ b/src/main/java/lion/Message/Main/MaintainMessage.java @@ -0,0 +1,9 @@ +package lion.Message.Main; + +import lion.Message.AbstractMessage; + +public class MaintainMessage extends AbstractMessage { + { + messageType = MAINTAIN_MESSAGE; + } +} diff --git a/src/main/java/lion/Message/ResponseMessage.java b/src/main/java/lion/Message/Main/ResponseMessage.java similarity index 72% rename from src/main/java/lion/Message/ResponseMessage.java rename to src/main/java/lion/Message/Main/ResponseMessage.java index 89430c7..b372534 100644 --- a/src/main/java/lion/Message/ResponseMessage.java +++ b/src/main/java/lion/Message/Main/ResponseMessage.java @@ -1,11 +1,12 @@ -package lion.Message; +package lion.Message.Main; +import lion.Message.AbstractMessage; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor -public class ResponseMessage extends AbstractMessage{ +public class ResponseMessage extends AbstractMessage { { messageType = RESPONSE_MESSAGE; } diff --git a/src/main/java/lion/Message/UpdateGalleryMessage.java b/src/main/java/lion/Message/Main/UpdateGalleryMessage.java similarity index 54% rename from src/main/java/lion/Message/UpdateGalleryMessage.java rename to src/main/java/lion/Message/Main/UpdateGalleryMessage.java index 3daf96a..9623855 100644 --- a/src/main/java/lion/Message/UpdateGalleryMessage.java +++ b/src/main/java/lion/Message/Main/UpdateGalleryMessage.java @@ -1,10 +1,11 @@ -package lion.Message; +package lion.Message.Main; import lion.Domain.GalleryTask; +import lion.Message.AbstractMessage; import lombok.Data; @Data -public class UpdateGalleryMessage extends AbstractMessage{ +public class UpdateGalleryMessage extends AbstractMessage { { messageType = UPDATE_GALLERY_MESSAGE; } diff --git a/src/main/java/lion/Message/Main/lombok.config b/src/main/java/lion/Message/Main/lombok.config new file mode 100644 index 0000000..8e37527 --- /dev/null +++ b/src/main/java/lion/Message/Main/lombok.config @@ -0,0 +1,2 @@ +config.stopBubbling=true +lombok.equalsAndHashCode.callSuper=call \ No newline at end of file diff --git a/src/main/java/lion/Message/MaintainMessage.java b/src/main/java/lion/Message/MaintainMessage.java deleted file mode 100644 index afdee39..0000000 --- a/src/main/java/lion/Message/MaintainMessage.java +++ /dev/null @@ -1,7 +0,0 @@ -package lion.Message; - -public class MaintainMessage extends AbstractMessage{ - { - messageType = MAINTAIN_MESSAGE; - } -} diff --git a/src/main/java/lion/Message/MessageCodec.java b/src/main/java/lion/Message/MessageCodec.java index c9b947a..4259c2a 100644 --- a/src/main/java/lion/Message/MessageCodec.java +++ b/src/main/java/lion/Message/MessageCodec.java @@ -5,6 +5,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageCodec; +import lion.Message.Acclerator.FileTransferMessage; +import lion.Message.Main.*; import lombok.extern.log4j.Log4j; import java.nio.charset.StandardCharsets; @@ -46,6 +48,7 @@ public class MessageCodec extends ByteToMessageCodec { case AbstractMessage.GALLERY_PAGE_QUERY_MESSAGE -> objectMapper.readValue(metadata, GalleryPageQueryMessage.class); case AbstractMessage.IDENTITY_MESSAGE -> objectMapper.readValue(metadata, IdentityMessage.class); case AbstractMessage.MAINTAIN_MESSAGE -> objectMapper.readValue(metadata, MaintainMessage.class); + case AbstractMessage.FILE_TRANSFER_MESSAGE -> objectMapper.readValue(metadata, FileTransferMessage.class); default -> null; }; diff --git a/src/main/java/lion/Service/DeliveryService.java b/src/main/java/lion/Service/DeliveryService.java index 79e2d2b..fcf6aea 100644 --- a/src/main/java/lion/Service/DeliveryService.java +++ b/src/main/java/lion/Service/DeliveryService.java @@ -1,6 +1,6 @@ package lion.Service; import lion.ErrorCode.ErrorCode; -import lion.Message.GalleryPageQueryMessage; +import lion.Message.Main.GalleryPageQueryMessage; import java.io.File; import java.io.IOException; @@ -31,7 +31,7 @@ public class DeliveryService { } public static byte deliveryPreview(String name, short page, short port){ - if(!pageCache.containsKey(name)){ + if(!pageCache.containsKey(name) || page > pageCache.get(name).size()){ //缓存中不存在或者页数超出缓存数量 byte result; if((result = pageCache(name)) != 0) return result; diff --git a/src/main/java/lion/Service/DownloadCheckService.java b/src/main/java/lion/Service/DownloadCheckService.java index 8b618e1..467b9b5 100644 --- a/src/main/java/lion/Service/DownloadCheckService.java +++ b/src/main/java/lion/Service/DownloadCheckService.java @@ -1,26 +1,37 @@ package lion.Service; +import io.netty.channel.Channel; +import io.netty.channel.DefaultEventLoop; +import io.netty.channel.EventLoop; +import io.netty.util.concurrent.DefaultPromise; +import io.netty.util.concurrent.Promise; +import lion.CustomUtil; import lion.Domain.GalleryTask; import lion.ErrorCode.ErrorCode; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ZipUtil; +import lion.Message.AbstractMessage; +import lion.Message.Acclerator.FileTransferMessage; +import lombok.Data; import lombok.extern.log4j.Log4j; import org.im4java.core.ConvertCmd; import org.im4java.core.IM4JavaException; import org.im4java.core.IMOperation; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.Iterator; +import java.io.*; +import java.net.InetSocketAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.nio.file.Files; +import java.util.*; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; @Log4j +@Data public class DownloadCheckService { ArrayList queue; @@ -32,8 +43,16 @@ public class DownloadCheckService { ArrayList convert_queue; - public DownloadCheckService(ArrayList queue){ + Channel node; + + HashMap> promises; + + EventLoop eventLoop; + + public DownloadCheckService(ArrayList queue, HashMap> promises){ this.queue = queue; + this.promises = promises; + eventLoop = new DefaultEventLoop(); convert_queue = new ArrayList<>(0); convert_thread = new ScheduledThreadPoolExecutor(1); convert_thread.scheduleAtFixedRate(this::convert, 0, 5, TimeUnit.SECONDS); @@ -98,7 +117,6 @@ public class DownloadCheckService { public void convert() { if(convert_queue.isEmpty()) return; - ConvertCmd convertCmd = new ConvertCmd(true); ReentrantLock reentrantLock = new ReentrantLock(); reentrantLock.lock(); ArrayList galleryTasks = new ArrayList<>(convert_queue); @@ -123,35 +141,15 @@ public class DownloadCheckService { } //thumbnail - IMOperation operation = new IMOperation(); - operation.addImage(images[0].getAbsolutePath()); - operation.resize(500, 500); - operation.format("webp"); - operation.addImage(storagePath + galleryTask.getName() + "/thumbnail.webp"); - try { - log.info("文件" + images[0].getName() + ",转换为thumbnail.webp"); - convertCmd.run(operation); - } catch (IOException | IM4JavaException | InterruptedException e) { - log.error("创建" + galleryTask.getName() + "缩略图失败"); - galleryTask.setStatus(ErrorCode.COMPRESS_ERROR); - continue; - } + log.info("文件" + images[0].getName() + ",转换为thumbnail.webp"); + if(!convert_remote(galleryTask, images[0], true)) + convert_local(galleryTask, images[0], true); if ((galleryTask.getType() & GalleryTask.DOWNLOAD_PREVIEW) != 0) for (int i = 0; i < images.length; i++) { log.info("文件" + images[i].getName() + ",转换为webp[" + i + "/" + images.length + "]"); - operation = new IMOperation(); - operation.addImage(images[i].getAbsolutePath()); - operation.format("webp"); - operation.resize(2000, 2000); - operation.addImage(storagePath + galleryTask.getName() + "/" + images[i].getName().replace(".png", ".webp").replace(".jpg", ".webp")); - try { - convertCmd.run(operation); - } catch (IOException | InterruptedException | IM4JavaException e) { - log.error("文件" + images[i].getName() + "转换失败"); - galleryTask.setStatus(ErrorCode.COMPRESS_ERROR); - break; - } + if(!convert_remote(galleryTask, images[i], false)) + convert_local(galleryTask, images[i], false); } if ((galleryTask.getType() & GalleryTask.DOWNLOAD_SOURCE) != 0) { @@ -163,4 +161,60 @@ public class DownloadCheckService { } } + public void convert_local(GalleryTask galleryTask, File file, boolean isThumbnail){ + ConvertCmd convertCmd = new ConvertCmd(true); + IMOperation operation = new IMOperation(); + operation.addImage(file.getAbsolutePath()); + + if(isThumbnail) { + operation.resize(500, 500); + operation.format("webp"); + operation.addImage(storagePath + galleryTask.getName() + "/thumbnail.webp"); + } else { + operation.format("webp"); + operation.addImage(storagePath + galleryTask.getName() + "/" + file.getName().replace(".png", ".webp").replace(".jpg", ".webp")); + } + try { + convertCmd.run(operation); + } catch (IOException | IM4JavaException | InterruptedException e) { + log.error("文件" + file.getName() + "转换失败"); + galleryTask.setStatus(ErrorCode.COMPRESS_ERROR); + } + } + + public boolean convert_remote(GalleryTask galleryTask, File file, boolean isThumbnail){ + if(node == null || !node.isActive() || file.length() < 1024 * 1024 * 5) + return false; + int port = CustomUtil._findIdlePort(); + FileTransferMessage fileTransferMessage = new FileTransferMessage(); + fileTransferMessage.messageId = CustomUtil.counter.getAndIncrement(); + fileTransferMessage.setFilename(file.getName()); + fileTransferMessage.setPort(port); + fileTransferMessage.setThumbnail(isThumbnail); + + try(ServerSocket serverSocket = new ServerSocket(port); + InputStream inputStream = Files.newInputStream(file.toPath())){ + node.writeAndFlush(fileTransferMessage).sync(); + Socket socket = serverSocket.accept(); + inputStream.transferTo(socket.getOutputStream()); + socket.close(); + }catch (IOException | InterruptedException e){ + return false; + } + + DefaultPromise promise = new DefaultPromise<>(eventLoop); + promises.put(fileTransferMessage.messageId, promise); + try (Socket socket = new Socket()){ + boolean result = promise.await(20, TimeUnit.SECONDS); + if(!result) + return false; + fileTransferMessage = (FileTransferMessage) promise.get(); + socket.connect(new InetSocketAddress("side.lionwebsite.xyz", fileTransferMessage.getPort())); + FileOutputStream fileOutputStream = new FileOutputStream(storagePath + galleryTask.getName() + "/" + fileTransferMessage.getFilename()); + socket.getInputStream().transferTo(fileOutputStream); + return true; + } catch (InterruptedException | ExecutionException | IOException e) { + return false; + } + } } diff --git a/src/main/java/lion/storageNode.java b/src/main/java/lion/storageNode.java index 1d02af4..c31c368 100644 --- a/src/main/java/lion/storageNode.java +++ b/src/main/java/lion/storageNode.java @@ -1,7 +1,10 @@ package lion; +import io.netty.util.concurrent.Promise; import lion.Domain.GalleryTask; import lion.Message.*; +import lion.Message.Acclerator.FileTransferMessage; +import lion.Message.Main.*; import lion.Service.DeleteService; import lion.Service.DeliveryService; import lion.Service.DownloadCheckService; @@ -20,6 +23,7 @@ import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.util.ArrayList; +import java.util.HashMap; import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; @@ -30,6 +34,8 @@ public class storageNode { Channel server; + Channel node; + DownloadCheckService downloadCheckService; ArrayList queue; @@ -38,6 +44,10 @@ public class storageNode { ScheduledExecutorService checkThreadPool; + HashMap> promises; + + EventLoop eventLoop; + int counter; ReentrantLock lock; @@ -49,6 +59,8 @@ public class storageNode { tempQueue = new ArrayList<>(0); lock = new ReentrantLock(); counter = 0; + promises = new HashMap<>(); + channelFuture = new ServerBootstrap() .channel(NioServerSocketChannel.class) @@ -62,12 +74,12 @@ public class storageNode { } }) .bind(26321); - log.info("listen port:8080"); - try(Socket socket = new Socket()) { - socket.connect(new InetSocketAddress("lionwebsite.xyz", 26322)); + try{ + new Socket().connect(new InetSocketAddress("lionwebsite.xyz", 26322)); + new Socket().connect(new InetSocketAddress("side.lionwebsite.xyz", 26322)); } catch (Exception ignored) {} - downloadCheckService = new DownloadCheckService(queue); + downloadCheckService = new DownloadCheckService(queue, promises); checkThreadPool = Executors.newScheduledThreadPool(1); checkThreadPool.scheduleAtFixedRate(this::mainThread, 5, 5, TimeUnit.SECONDS); } @@ -115,66 +127,83 @@ public class storageNode { ArrayList queue; public MyChannelInboundHandlerAdapter(ArrayList queue) { - super(); this.queue = queue; } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { System.out.println(msg); + AbstractMessage abstractMessage = (AbstractMessage) msg; - if(msg instanceof IdentityMessage) { - server = ctx.channel(); - log.info("server 上线"); - //提交下载 - }else if(msg instanceof DownloadPostMessage dpm){ - lock.lock(); - queue.add(dpm.getGalleryTask()); - System.out.println(queue); - lock.unlock(); - ctx.writeAndFlush(new ResponseMessage(dpm.messageId, (byte) 0)); + switch (abstractMessage.messageType){ + case AbstractMessage.FILE_TRANSFER_MESSAGE -> { + FileTransferMessage fileTransferMessage = (FileTransferMessage) abstractMessage; + Promise abstractMessagePromise = promises.get(fileTransferMessage.messageId); + if(abstractMessagePromise != null) + abstractMessagePromise.setSuccess(fileTransferMessage); + } + case AbstractMessage.IDENTITY_MESSAGE -> { + IdentityMessage identityMessage = (IdentityMessage) abstractMessage; + if(identityMessage.getIdentity().equals("lionwebsite")) { + server = ctx.channel(); + log.info("server 上线"); + } else if(identityMessage.getIdentity().equals("lionwebsiteside")){ + node = ctx.channel(); + log.info("node上线"); + downloadCheckService.setNode(node); + } + } + case AbstractMessage.DOWNLOAD_POST_MESSAGE -> { + DownloadPostMessage dpm = (DownloadPostMessage) abstractMessage; + lock.lock(); + queue.add(dpm.getGalleryTask()); + System.out.println(queue); + lock.unlock(); + ctx.writeAndFlush(new ResponseMessage(dpm.messageId, (byte) 0)); + } + case AbstractMessage.DELETE_GALLERY_MESSAGE -> { + DeleteGalleryMessage deleteGalleryMessage = (DeleteGalleryMessage) abstractMessage; + byte result = switch (deleteGalleryMessage.getDeleteType()){ + case DeleteGalleryMessage.DELETE_ALL -> + DeleteService.deleteAll(storagePath + deleteGalleryMessage.getGalleryName()); + case DeleteGalleryMessage.DELETE_PREVIEW -> + DeleteService.deletePreview(storagePath + deleteGalleryMessage.getGalleryName()); + case DeleteGalleryMessage.DELETE_SOURCE -> + DeleteService.deleteSource(storagePath + deleteGalleryMessage.getGalleryName()); + default -> -1; + }; + ResponseMessage responseMessage = new ResponseMessage(deleteGalleryMessage.messageId, result); + ctx.writeAndFlush(responseMessage); + } + case AbstractMessage.GALLERY_REQUEST_MESSAGE -> { + GalleryRequestMessage grm = (GalleryRequestMessage) abstractMessage; + byte result = DeliveryService.deliveryPreview(grm.getGalleryName(), grm.getPage(), grm.getPort()); - //删除本子 全部/预览/源文件 - }else if(msg instanceof DeleteGalleryMessage deleteGalleryMessage){ - byte result = switch (deleteGalleryMessage.getDeleteType()){ - case DeleteGalleryMessage.DELETE_ALL -> - DeleteService.deleteAll(storagePath + deleteGalleryMessage.getGalleryName()); - case DeleteGalleryMessage.DELETE_PREVIEW -> - DeleteService.deletePreview(storagePath + deleteGalleryMessage.getGalleryName()); - case DeleteGalleryMessage.DELETE_SOURCE -> - DeleteService.deleteSource(storagePath + deleteGalleryMessage.getGalleryName()); - default -> -1; - }; - ResponseMessage responseMessage = new ResponseMessage(deleteGalleryMessage.messageId, result); - ctx.writeAndFlush(responseMessage); - - //请求预览 - }else if(msg instanceof GalleryRequestMessage grm){ - byte result = DeliveryService.deliveryPreview(grm.getGalleryName(), grm.getPage(), grm.getPort()); - - ResponseMessage responseMessage = new ResponseMessage(); - responseMessage.messageId = grm.messageId; - responseMessage.setResult(result); - ctx.writeAndFlush(responseMessage); - - //更新本子 删除原有文件,然后加入到队列 - }else if(msg instanceof UpdateGalleryMessage ugm){ - FileUtil.del(storagePath + ugm.getGalleryTask().getName()); - lock.lock(); - queue.add(ugm.getGalleryTask()); - System.out.println(queue); - lock.unlock(); - ctx.writeAndFlush(new ResponseMessage(ugm.messageId, (byte) 0)); - - }else if(msg instanceof GalleryPageQueryMessage gpqm){ - byte result = DeliveryService.pageQuery(gpqm); - gpqm.setResult(result); - ctx.writeAndFlush(gpqm); + ResponseMessage responseMessage = new ResponseMessage(); + responseMessage.messageId = grm.messageId; + responseMessage.setResult(result); + ctx.writeAndFlush(responseMessage); + } + case AbstractMessage.UPDATE_GALLERY_MESSAGE -> { + UpdateGalleryMessage ugm = (UpdateGalleryMessage) abstractMessage; + FileUtil.del(storagePath + ugm.getGalleryTask().getName()); + lock.lock(); + queue.add(ugm.getGalleryTask()); + System.out.println(queue); + lock.unlock(); + ctx.writeAndFlush(new ResponseMessage(ugm.messageId, (byte) 0)); + } + case AbstractMessage.GALLERY_PAGE_QUERY_MESSAGE -> { + GalleryPageQueryMessage gpqm = (GalleryPageQueryMessage) abstractMessage; + byte result = DeliveryService.pageQuery(gpqm); + gpqm.setResult(result); + ctx.writeAndFlush(gpqm); + } } - - //修复预览 - - //重新生成压缩包 +// +// //修复预览 +// +// //重新生成压缩包 } @Override @@ -182,6 +211,10 @@ public class storageNode { if(ctx.channel().equals(server)) { log.info("server 下线"); server = null; + } else if(ctx.channel().equals(node)){ + log.info("node 下线"); + node = null; + downloadCheckService.setNode(null); } } }