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