@@ -19,6 +19,7 @@ import com.redhat.devtools.gateway.openshift.Pods
1919import com.redhat.devtools.gateway.server.RemoteIDEServer
2020import io.kubernetes.client.openapi.ApiException
2121import java.io.IOException
22+ import java.net.ServerSocket
2223import java.net.URI
2324
2425class DevSpacesConnection (private val devSpacesContext : DevSpacesContext ) {
@@ -29,10 +30,6 @@ class DevSpacesConnection(private val devSpacesContext: DevSpacesContext) {
2930 onDisconnected : () -> Unit ,
3031 onDevWorkspaceStopped : () -> Unit ,
3132 ): ThinClientHandle {
32- if (devSpacesContext.isConnected)
33- throw IOException (" Already connected to ${devSpacesContext.devWorkspace.name} " )
34-
35- devSpacesContext.isConnected = true
3633 try {
3734 return doConnect(onConnected, onDevWorkspaceStopped, onDisconnected)
3835 } catch (e: Exception ) {
@@ -56,14 +53,17 @@ class DevSpacesConnection(private val devSpacesContext: DevSpacesContext) {
5653 ? : throw IOException (" Could not connect, remote IDE is not ready. No join link present." )
5754
5855 val pods = Pods (devSpacesContext.client)
59- val forwarder = pods.forward(remoteIdeServer.pod, 5990 , 5990 )
60- pods.waitForForwardReady(5990 )
56+ // ✅ Dynamically find a free local port
57+ val localPort = findFreePort()
58+ val forwarder = pods.forward(remoteIdeServer.pod, localPort, 5990 )
59+ pods.waitForForwardReady(localPort)
60+ val effectiveJoinLink = joinLink.replace(" :5990" , " :$localPort " )
6161
6262 val client = LinkedClientManager
6363 .getInstance()
6464 .startNewClient(
6565 Lifetime .Eternal ,
66- URI (joinLink ),
66+ URI (effectiveJoinLink ),
6767 " " ,
6868 onConnected,
6969 false
@@ -93,6 +93,13 @@ class DevSpacesConnection(private val devSpacesContext: DevSpacesContext) {
9393 return client
9494 }
9595
96+ private fun findFreePort (): Int {
97+ ServerSocket (0 ).use { socket ->
98+ socket.reuseAddress = true
99+ return socket.localPort
100+ }
101+ }
102+
96103 @Throws(IOException ::class , ApiException ::class )
97104 private fun startAndWaitDevWorkspace () {
98105 if (! devSpacesContext.devWorkspace.started) {
0 commit comments