From bcc123f8dc85c42eb4229584ee3e08e476153621 Mon Sep 17 00:00:00 2001 From: chuzhongzai Date: Thu, 2 May 2024 16:42:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BB=B6=E8=BF=9F=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=EF=BC=8C=E5=85=81=E8=AE=B8=E6=B5=8B=E8=AF=95=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E6=9C=8D=E5=8A=A1=E5=99=A8=E4=B9=8B=E9=97=B4=E6=88=96?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=88=B0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=85=AC=E7=BD=91ip=E7=9A=84=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lion/snss/message/AbstractMessage.java | 1 + .../lion/snss/message/DelayTestMessage.java | 11 +++++++ .../com/lion/snss/message/MessageCodec.java | 1 + .../lion/snss/message/ResponseMessage.java | 13 +++++--- .../service/CommunicateToMainService.java | 33 +++++++++++++++++++ 5 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/lion/snss/message/DelayTestMessage.java diff --git a/src/main/java/com/lion/snss/message/AbstractMessage.java b/src/main/java/com/lion/snss/message/AbstractMessage.java index 7af2774..f798d06 100644 --- a/src/main/java/com/lion/snss/message/AbstractMessage.java +++ b/src/main/java/com/lion/snss/message/AbstractMessage.java @@ -26,6 +26,7 @@ public class AbstractMessage { public static final int SHARE_FILE_QUERY_MESSAGE = 73; public static final int CONFIG_MESSAGE = 80; public static final int CONNECT_MESSAGE = 90; + public static final int DELAY_TEST_MESSAGE = 91; public int messageType; public int messageId; diff --git a/src/main/java/com/lion/snss/message/DelayTestMessage.java b/src/main/java/com/lion/snss/message/DelayTestMessage.java new file mode 100644 index 0000000..ccfbccd --- /dev/null +++ b/src/main/java/com/lion/snss/message/DelayTestMessage.java @@ -0,0 +1,11 @@ +package com.lion.snss.message; + +import lombok.Data; + +@Data +public class DelayTestMessage extends AbstractMessage{ + { + messageType = DELAY_TEST_MESSAGE; + } + String ip; +} diff --git a/src/main/java/com/lion/snss/message/MessageCodec.java b/src/main/java/com/lion/snss/message/MessageCodec.java index 121e340..325e7d1 100644 --- a/src/main/java/com/lion/snss/message/MessageCodec.java +++ b/src/main/java/com/lion/snss/message/MessageCodec.java @@ -56,6 +56,7 @@ public class MessageCodec extends ByteToMessageCodec { case AbstractMessage.SHARE_FILE_QUERY_MESSAGE -> objectMapper.readValue(bytes, ShareFileQueryMessage.class); 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); default -> throw new IllegalStateException("Unexpected value: " + type); }; diff --git a/src/main/java/com/lion/snss/message/ResponseMessage.java b/src/main/java/com/lion/snss/message/ResponseMessage.java index 6c68c82..555f92e 100644 --- a/src/main/java/com/lion/snss/message/ResponseMessage.java +++ b/src/main/java/com/lion/snss/message/ResponseMessage.java @@ -13,7 +13,7 @@ public class ResponseMessage extends AbstractMessage{ boolean result; @JsonInclude(JsonInclude.Include.NON_NULL) - HashMap data; + HashMap data; public ResponseMessage(){ data = new HashMap<>(); @@ -24,25 +24,28 @@ public class ResponseMessage extends AbstractMessage{ data = new HashMap<>(); } - public void setDataAndResult(String data, boolean result){ + public ResponseMessage setDataAndResult(String data, boolean result){ this.result = result; if(result){ this.data.put("data", data); }else{ this.data.put("cause", data); } + return this; } - public void put(String key, String value){ + public ResponseMessage put(String key, String value){ data.put(key, value); + return this; } - public void put(String key, Object o){ + public ResponseMessage put(String key, Object o){ data.put(key, String.valueOf(o)); + return this; } public String get(String key){ - return data.get(key); + return data.get(key).toString(); } public ResponseMessage success(String data) { diff --git a/src/main/java/com/lion/snss/service/CommunicateToMainService.java b/src/main/java/com/lion/snss/service/CommunicateToMainService.java index ffdbf90..502eca3 100644 --- a/src/main/java/com/lion/snss/service/CommunicateToMainService.java +++ b/src/main/java/com/lion/snss/service/CommunicateToMainService.java @@ -27,6 +27,7 @@ import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.springframework.stereotype.Service; import java.io.*; +import java.net.Inet4Address; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; @@ -447,6 +448,10 @@ public class CommunicateToMainService { throw new RuntimeException(e); } } + case AbstractMessage.DELAY_TEST_MESSAGE -> { + DelayTestMessage delayTestMessage = (DelayTestMessage) abstractMessage; + ctx.channel().writeAndFlush(delayTestToIp(delayTestMessage)); + } } } @@ -1244,5 +1249,33 @@ public class CommunicateToMainService { dynamicConfigMessage.updateUserStorage(user); channelFuture.channel().writeAndFlush(dynamicConfigMessage); } + + private ResponseMessage delayTestToIp(DelayTestMessage delayTestMessage) { + ResponseMessage response = new ResponseMessage(delayTestMessage.getMessageId()); + long sum = 0; + long[] data = new long[6]; + for(int i=0; i<5; i++){ + try { + long start = System.currentTimeMillis(); + if(!Inet4Address.getByName(ip).isReachable(5000)) { + data[i] = -1; + continue; + } + long duration = System.currentTimeMillis() - start; + if(duration == 0) + duration = 1; + data[i] = duration; + sum += duration; + } catch (IOException e) { + response.failure("该ip无法连接或连接超时"); + return response; + } + } + if(sum == 0) + return response.failure("该ip无法连接或连接超时"); + else + data[5] = sum / 5; + return response.put("data", Arrays.toString(data)).success(); + } } }