From d3ed178e82c70bc6a8f000e5bbfb6373fd8458f4 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Thu, 20 Apr 2017 19:29:03 +0200 Subject: [PATCH] DemoBench: upgrade to latest TornadoFX to get combobox width fix, and launch web browser once web server has started. --- tools/demobench/build.gradle | 2 +- .../net/corda/demobench/views/NodeTabView.kt | 1 - .../corda/demobench/views/NodeTerminalView.kt | 29 ++++++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/tools/demobench/build.gradle b/tools/demobench/build.gradle index 6d5de77dd8..f180b12b85 100644 --- a/tools/demobench/build.gradle +++ b/tools/demobench/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.tornadofx_version = '1.7.1' + ext.tornadofx_version = '1.7.3' ext.jna_version = '4.1.0' ext.purejavacomm_version = '0.0.17' ext.controlsfx_version = '8.40.12' diff --git a/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTabView.kt b/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTabView.kt index b9e2ace161..97269eb354 100644 --- a/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTabView.kt +++ b/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTabView.kt @@ -194,7 +194,6 @@ class NodeTabView : Fragment() { value = CityDatabase["London"] - // TODO: Upgrade to TornadoFX 1.7.3 to fix an issue where the combobox dropdown isn't wide enough. isEditable = true makeAutocompletable() } diff --git a/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTerminalView.kt b/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTerminalView.kt index 41bda9c809..22d45218ac 100644 --- a/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTerminalView.kt +++ b/tools/demobench/src/main/kotlin/net/corda/demobench/views/NodeTerminalView.kt @@ -1,5 +1,6 @@ package net.corda.demobench.views +import com.google.common.util.concurrent.RateLimiter import com.jediterm.terminal.TerminalColor import com.jediterm.terminal.TextStyle import com.jediterm.terminal.ui.settings.DefaultSettingsProvider @@ -23,8 +24,12 @@ import net.corda.demobench.web.DBViewer import net.corda.demobench.web.WebServerController import tornadofx.* import java.awt.Dimension +import java.io.IOException +import java.net.SocketException +import java.net.URL import java.util.logging.Level import javax.swing.SwingUtilities +import kotlin.concurrent.thread class NodeTerminalView : Fragment() { override val root by fxml() @@ -138,8 +143,30 @@ class NodeTerminalView : Fragment() { webServer.open(config, onExit = { launchWebButton.isDisable = false - app.hostServices.showDocument("http://localhost:${config.webPort}/") }) + + openBrowserWhenWebServerHasStarted(config) + } + } + + private fun openBrowserWhenWebServerHasStarted(config: NodeConfig) { + thread { + log.info("Waiting for web server to start ...") + val url = URL("http://localhost:${config.webPort}/") + val rateLimiter = RateLimiter.create(1.0) + while (true) { + try { + rateLimiter.acquire() + val conn = url.openConnection() + conn.connectTimeout = 1000 // msec + conn.connect() + log.info("Web server started") + app.hostServices.showDocument(url.toString()) + break + } catch(e: SocketException) { + } catch(e: IOException) { + } + } } }