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