diff --git a/pom.xml b/pom.xml
index 840afc1..05b1f4c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -97,7 +97,7 @@
--gc=G1
--enable-url-protocols=https
-H:IncludeResources="simplelogger.properties"
- --initialize-at-build-time=org.slf4j.simple.SimpleLogger,org.slf4j.simple.SimpleLoggerFactory
+ --initialize-at-build-time=org.slf4j.simple.SimpleLogger,org.slf4j.simple.SimpleLoggerFactory,org.slf4j.simple.SimpleLoggerConfiguration
-H:ReflectionConfigurationFiles=src/main/resources/reflect-config.json
diff --git a/src/main/java/lion/CustomUtil.java b/src/main/java/lion/CustomUtil.java
index 6621e72..3c7ca07 100644
--- a/src/main/java/lion/CustomUtil.java
+++ b/src/main/java/lion/CustomUtil.java
@@ -3,6 +3,8 @@ package lion;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
+import java.io.IOException;
+import java.net.ServerSocket;
import java.util.concurrent.atomic.AtomicInteger;
@@ -12,4 +14,15 @@ public class CustomUtil {
public static AtomicInteger counter = new AtomicInteger();
public static ObjectMapper objectMapper = new ObjectMapper();
+
+ public static int _findIdlePort(int port) {
+ for(int i=port; i<65535; i++){
+ try(ServerSocket ignored = new ServerSocket(i)){
+ ignored.close();
+ return i;
+ }catch (IOException ignored) {
+ }
+ }
+ return -1;
+ }
}
diff --git a/src/main/java/lion/storageNode.java b/src/main/java/lion/storageNode.java
index 77f0efd..db521d1 100644
--- a/src/main/java/lion/storageNode.java
+++ b/src/main/java/lion/storageNode.java
@@ -54,6 +54,8 @@ public class storageNode {
counter = 0;
promises = new HashMap<>();
+ int real_port = CustomUtil._findIdlePort(26321);
+
channelFuture = new ServerBootstrap()
.channel(NioServerSocketChannel.class)
.group(new NioEventLoopGroup())
@@ -64,12 +66,25 @@ public class storageNode {
channel.pipeline().addLast(new MessageCodec());
channel.pipeline().addLast(new MyChannelInboundHandlerAdapter(tempQueue));
}
- })
- .bind(26321);
+ }).bind(real_port);
+ log.info("listening on port {}", real_port);
- try(Socket socket = new Socket()){
- socket.connect(new InetSocketAddress("lionwebsite.xyz", 26322));
- } catch (Exception ignored) {}
+ int i;
+ for(i=0; i<=20; i++) {
+ try (Socket socket = new Socket()) {
+ socket.setSoTimeout(3000);
+ log.info("wake up main server on port {}", 26322 + i);
+ socket.connect(new InetSocketAddress("lionwebsite.xyz", 26322 + i));
+ byte[] bytes = socket.getInputStream().readAllBytes();
+ if(bytes.length > 0 && new String(bytes).equals("lionwebsite")) {
+ break;
+ }
+ } catch (Exception ignored) {
+ }
+ }
+ if (i==20) {
+ log.info("server connect failed");
+ }
downloadCheckService = new DownloadCheckService(queue, promises);
checkThreadPool = Executors.newScheduledThreadPool(1);
checkThreadPool.scheduleAtFixedRate(this::mainThread, 5, 5, TimeUnit.SECONDS);