From 5c11c924baac24199e9b2012c55fb259d3890ea9 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 10 Jun 2025 11:19:04 +0200 Subject: [PATCH] [lsp] refactoring, separate withBaseProtocolFraming and tcpServer implementations to different files LSP-166 GitOrigin-RevId: a0ac03f9ddc44e1395c9365dd01d1648ff374d20 --- .../{tcpServer.kt => protocolFraming.kt} | 28 ------------- .../com/jetbrains/lsp/implementation/tcp.kt | 40 +++++++++++++++++++ 2 files changed, 40 insertions(+), 28 deletions(-) rename fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/{tcpServer.kt => protocolFraming.kt} (79%) create mode 100644 fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcp.kt diff --git a/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcpServer.kt b/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/protocolFraming.kt similarity index 79% rename from fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcpServer.kt rename to fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/protocolFraming.kt index d070406a4222..3d70ff052aa4 100644 --- a/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcpServer.kt +++ b/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/protocolFraming.kt @@ -3,9 +3,7 @@ package com.jetbrains.lsp.implementation import com.jetbrains.lsp.protocol.Initialize import com.jetbrains.lsp.protocol.InitializeResult import com.jetbrains.lsp.protocol.* -import fleet.util.logging.logger import kotlinx.coroutines.* -import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.channels.SendChannel import kotlinx.coroutines.channels.Channel @@ -14,33 +12,7 @@ import kotlinx.serialization.json.JsonElement import java.io.InputStream import java.io.OutputStream import java.io.ByteArrayOutputStream -import java.net.ServerSocket -suspend fun tcpServer(port: Int = 0, server: suspend CoroutineScope.(InputStream, OutputStream) -> Unit) { - ServerSocket(port).use { serverSocket -> - LOG.info("Server is listening on port ${serverSocket.localPort}") - supervisorScope { - while (true) { - val clientSocket = runInterruptible(Dispatchers.IO) { - serverSocket.accept() - } - LOG.info("A new client connected ${clientSocket.inetAddress}:${clientSocket.port}") - launch(start = CoroutineStart.ATOMIC) { - clientSocket.use { - val input = clientSocket.getInputStream() - val output = clientSocket.getOutputStream() - coroutineScope { - server(input, output) - } - } - LOG.info("Client disconnected ${clientSocket.inetAddress}:${clientSocket.port}") - } - } - } - } -} - -private val LOG = logger() private fun InputStream.readLine(): String { val buffer = ByteArrayOutputStream() diff --git a/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcp.kt b/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcp.kt new file mode 100644 index 000000000000..2c212293ac3b --- /dev/null +++ b/fleet/lsp.protocol/src/main/com/jetbrains/lsp/implementation/tcp.kt @@ -0,0 +1,40 @@ +package com.jetbrains.lsp.implementation + +import fleet.util.logging.logger +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.CoroutineStart +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.runInterruptible +import kotlinx.coroutines.supervisorScope +import java.io.InputStream +import java.io.OutputStream +import java.net.ServerSocket +import kotlin.io.use + +suspend fun tcpServer(port: Int = 0, server: suspend CoroutineScope.(InputStream, OutputStream) -> Unit) { + ServerSocket(port).use { serverSocket -> + LOG.info("Server is listening on port ${serverSocket.localPort}") + supervisorScope { + while (true) { + val clientSocket = runInterruptible(Dispatchers.IO) { + serverSocket.accept() + } + LOG.info("A new client connected ${clientSocket.inetAddress}:${clientSocket.port}") + launch(start = CoroutineStart.ATOMIC) { + clientSocket.use { + val input = clientSocket.getInputStream() + val output = clientSocket.getOutputStream() + coroutineScope { + server(input, output) + } + } + LOG.info("Client disconnected ${clientSocket.inetAddress}:${clientSocket.port}") + } + } + } + } +} + +private val LOG = logger()