From 726ad4cb634810fe1eae74a8580db972d4b6e026 Mon Sep 17 00:00:00 2001 From: Matthew Gerring Date: Thu, 28 May 2015 17:44:07 +0100 Subject: [PATCH] Changed activator to work with multiple clients but always look for a free port starting from the default port. --- .../defaultserver/DefaultServerActivator.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/net.sf.py4j.defaultserver/src/net/sf/py4j/defaultserver/DefaultServerActivator.java b/net.sf.py4j.defaultserver/src/net/sf/py4j/defaultserver/DefaultServerActivator.java index 6035b76e..bd1dac76 100644 --- a/net.sf.py4j.defaultserver/src/net/sf/py4j/defaultserver/DefaultServerActivator.java +++ b/net.sf.py4j.defaultserver/src/net/sf/py4j/defaultserver/DefaultServerActivator.java @@ -42,23 +42,28 @@ public void start(BundleContext bundleContext) throws Exception { final boolean enabled = getPreferenceStore().getBoolean(PreferenceConstants.PREF_PY4J_ACTIVE); boolean override = Boolean.getBoolean(PreferenceConstants.PREF_PY4J_ACTIVE); // They can override the default using -DPREF_PY4J_ACTIVE=... if (!enabled && !override) return; + + // We override any port setting because we record the autogenerated one. + getPreferenceStore().setValue(PreferenceConstants.PREF_DEFAULT_PORT, GatewayServer.DEFAULT_PORT); + getPreferenceStore().setValue(PreferenceConstants.PREF_DEFAULT_CALLBACK_PORT, GatewayServer.DEFAULT_PYTHON_PORT); + // Now we look for a free port and record the one we end up with if we change it (multiple clients are possible!) int defaultPort = getPreferenceStore().getInt(PreferenceConstants.PREF_DEFAULT_PORT); if (defaultPort<1) defaultPort = GatewayServer.DEFAULT_PORT; // We look for a free port and change the preference if the port is not free. if (!isPortFree(defaultPort)) { - defaultPort = getFreePort(defaultPort); + defaultPort = getFreePort(defaultPort, 2); getPreferenceStore().setValue(PreferenceConstants.PREF_DEFAULT_PORT, defaultPort); + getPreferenceStore().setValue(PreferenceConstants.PREF_DEFAULT_CALLBACK_PORT, getFreePort(defaultPort+1, 1)); } - int defaultCallBackPort = getPreferenceStore().getInt(PreferenceConstants.PREF_DEFAULT_CALLBACK_PORT); if (defaultCallBackPort<1) defaultCallBackPort = GatewayServer.DEFAULT_PYTHON_PORT; // We look for a free port and change the preference if the port is not free. if (!isPortFree(defaultCallBackPort)) { - defaultCallBackPort = getFreePort(defaultCallBackPort); + defaultCallBackPort = getFreePort(defaultCallBackPort, 2); getPreferenceStore().setValue(PreferenceConstants.PREF_DEFAULT_CALLBACK_PORT, defaultCallBackPort); } @@ -106,11 +111,11 @@ public void start(BundleContext bundleContext) throws Exception { * @param startPort * @return */ - public static int getFreePort(final int startPort) { + public static int getFreePort(final int startPort, int inc) { int port = startPort; while (!isPortFree(port)) - port++; + port+=inc; return port; }