From 8afcc0b89a7fb45f29af3c03c6ba71c6c8aa46dc Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sat, 23 Apr 2022 02:20:18 -0400 Subject: [PATCH] Add message for bind failure (HTTP) --- .../grasscutter/netty/MihoyoKcpServer.java | 5 ++-- .../server/dispatch/DispatchServer.java | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java b/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java index c3a9297b2..41e8ad412 100644 --- a/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java +++ b/src/main/java/emu/grasscutter/netty/MihoyoKcpServer.java @@ -64,9 +64,8 @@ public class MihoyoKcpServer extends Thread { // Wait until the server socket is closed. f.channel().closeFuture().sync(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); + } catch (Exception exception) { + Grasscutter.getLogger().error("Unable to start game server.", exception); } finally { // Close finish(); diff --git a/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java b/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java index 7c7915675..ea7c1166e 100644 --- a/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java +++ b/src/main/java/emu/grasscutter/server/dispatch/DispatchServer.java @@ -24,6 +24,7 @@ import emu.grasscutter.utils.Utils; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import java.io.*; +import java.net.BindException; import java.net.InetSocketAddress; import java.net.URI; import java.net.URLDecoder; @@ -158,12 +159,21 @@ public final class DispatchServer { Grasscutter.getLogger().error("[Dispatch] Error while initializing region info!", e); } } + + private HttpServer safelyCreateServer(InetSocketAddress address) { + try { + return HttpServer.create(address, 0); + } catch (BindException ignored) { + Grasscutter.getLogger().error("Unable to bind to port: " + getAddress().getPort() + " (HTTP)"); + } catch (Exception exception) { + Grasscutter.getLogger().error("Unable to start HTTP server.", exception); + } return null; + } public void start() throws Exception { HttpServer server; if (Grasscutter.getConfig().getDispatchOptions().UseSSL) { - HttpsServer httpsServer; - httpsServer = HttpsServer.create(getAddress(), 0); + HttpsServer httpsServer = HttpsServer.create(getAddress(), 0); SSLContext sslContext = SSLContext.getInstance("TLS"); try (FileInputStream fis = new FileInputStream(Grasscutter.getConfig().getDispatchOptions().KeystorePath)) { char[] keystorePassword = Grasscutter.getConfig().getDispatchOptions().KeystorePassword.toCharArray(); @@ -176,14 +186,20 @@ public final class DispatchServer { httpsServer.setHttpsConfigurator(new HttpsConfigurator(sslContext)); server = httpsServer; + } catch (BindException ignored) { + Grasscutter.getLogger().error("Unable to bind to port: " + getAddress().getPort() + " (HTTPS)"); + server = this.safelyCreateServer(this.getAddress()); } catch (Exception e) { Grasscutter.getLogger().warn("[Dispatch] No SSL cert found! Falling back to HTTP server."); Grasscutter.getConfig().getDispatchOptions().UseSSL = false; - server = HttpServer.create(getAddress(), 0); + server = this.safelyCreateServer(this.getAddress()); } } else { - server = HttpServer.create(getAddress(), 0); + server = this.safelyCreateServer(this.getAddress()); } + + if(server == null) + throw new NullPointerException("An HTTP server was not created."); server.createContext("/", t -> responseHTML(t, "Hello"));