From a5cc47e7099c99a4fd1f0cc0f96e7871ad7c3cf4 Mon Sep 17 00:00:00 2001 From: AlexHaxe Date: Thu, 14 Sep 2023 01:20:47 +0200 Subject: [PATCH] added displayHost --- .../LanguageServerMethods.hx | 9 ++++++-- src/haxeLanguageServer/Configuration.hx | 2 ++ src/haxeLanguageServer/server/HaxeServer.hx | 22 ++++++++++--------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/shared/haxeLanguageServer/LanguageServerMethods.hx b/shared/haxeLanguageServer/LanguageServerMethods.hx index a5c1a4b5..2d56c734 100644 --- a/shared/haxeLanguageServer/LanguageServerMethods.hx +++ b/shared/haxeLanguageServer/LanguageServerMethods.hx @@ -41,9 +41,9 @@ class LanguageServerMethods { static inline final DidChangeActiveTextEditor = new NotificationType<{uri:DocumentUri}>("haxe/didChangeActiveTextEditor"); /** - This notification is sent from the server to the client when the display port has changed. + This notification is sent from the server to the client when the display host / port has changed. **/ - static inline final DidChangeDisplayPort = new NotificationType<{port:Int}>("haxe/didChangeDisplayPort"); + static inline final DidChangeDisplayPort = new NotificationType("haxe/didChangeDisplayPort"); /** This notification is sent from the server to the client when a Haxe JSON-RPC method was executed. @@ -110,3 +110,8 @@ typedef AdditionalTimes = { final beforeProcessing:Float; final afterProcessing:Float; } + +typedef ServerAddress = { + host:String, + port:Int +} diff --git a/src/haxeLanguageServer/Configuration.hx b/src/haxeLanguageServer/Configuration.hx index 2c5fb1bf..0a19efff 100644 --- a/src/haxeLanguageServer/Configuration.hx +++ b/src/haxeLanguageServer/Configuration.hx @@ -89,6 +89,7 @@ typedef UserConfig = { var enableServerView:Bool; var enableSignatureHelpDocumentation:Bool; var diagnosticsPathFilter:String; + var displayHost:String; var displayPort:EitherType; var buildCompletionCache:Bool; var enableCompletionCacheWarning:Bool; @@ -150,6 +151,7 @@ class Configuration { enableServerView: false, enableSignatureHelpDocumentation: true, diagnosticsPathFilter: "${workspaceRoot}", + displayHost: null, displayPort: null, buildCompletionCache: true, enableCompletionCacheWarning: true, diff --git a/src/haxeLanguageServer/server/HaxeServer.hx b/src/haxeLanguageServer/server/HaxeServer.hx index c5cf291d..f37776f3 100644 --- a/src/haxeLanguageServer/server/HaxeServer.hx +++ b/src/haxeLanguageServer/server/HaxeServer.hx @@ -5,6 +5,7 @@ import haxe.Json; import haxe.display.Protocol; import haxe.display.Server.ServerMethods; import haxe.io.Path; +import haxeLanguageServer.LanguageServerMethods.ServerAddress; import haxeLanguageServer.helper.SemVer; import haxeLanguageServer.server.HaxeConnection; import js.lib.Promise; @@ -165,11 +166,12 @@ class HaxeServer { }); final displayPort = context.config.user.displayPort; + final displayHost = context.config.user.displayHost ?? "127.0.0.1"; if (socketListener == null && displayPort != null) { if (displayPort == "auto") { - getAvailablePort(6000).then(startSocketServer); + getAvailablePort(displayHost, 6000).then(startSocketServer); } else { - startSocketServer(displayPort); + startSocketServer({host: displayHost, port: displayPort}); } } else { starting = false; @@ -266,11 +268,11 @@ class HaxeServer { } // https://gist.github.com/mikeal/1840641#gistcomment-2337132 - function getAvailablePort(startingAt:Int):Promise { - function getNextAvailablePort(currentPort:Int, cb:Int->Void) { + function getAvailablePort(host:String, startingAt:Int):Promise { + function getNextAvailablePort(currentPort:Int, cb:ServerAddress->Void) { final server = Net.createServer(); - server.listen(currentPort, "localhost", () -> { - server.once(ServerEvent.Close, cb.bind(currentPort)); + server.listen(currentPort, host, () -> { + server.once(ServerEvent.Close, cb.bind({host: host, port: currentPort})); server.close(); }); server.on(ServerEvent.Error, _ -> getNextAvailablePort(currentPort + 1, cb)); @@ -278,7 +280,7 @@ class HaxeServer { return new Promise((resolve, reject) -> getNextAvailablePort(startingAt, resolve)); } - public function startSocketServer(port:Int) { + public function startSocketServer(address:ServerAddress) { if (socketListener != null) { socketListener.close(); } @@ -305,9 +307,9 @@ class HaxeServer { trace("Socket error: " + err); }); }); - socketListener.listen(port, "localhost"); - trace('Listening on port $port'); - context.languageServerProtocol.sendNotification(LanguageServerMethods.DidChangeDisplayPort, {port: port}); + socketListener.listen(address.port, address.host); + trace('Listening on port ${address.host}:${address.port}'); + context.languageServerProtocol.sendNotification(LanguageServerMethods.DidChangeDisplayPort, address); starting = false; checkRestart();