Skip to content

Commit

Permalink
Deprecate old transport API for removal in next release
Browse files Browse the repository at this point in the history
  • Loading branch information
whyoleg committed Apr 17, 2024
1 parent d79abcf commit 6fcc361
Show file tree
Hide file tree
Showing 27 changed files with 67 additions and 45 deletions.
Expand Up @@ -45,7 +45,6 @@ kotlin {
optIn(OptIns.DelicateCoroutinesApi)

// rsocket related
optIn(OptIns.TransportApi)
optIn(OptIns.RSocketTransportApi)
optIn(OptIns.ExperimentalMetadataApi)
optIn(OptIns.ExperimentalStreamsApi)
Expand Down
1 change: 0 additions & 1 deletion build-logic/src/main/kotlin/rsocketbuild/OptIns.kt
Expand Up @@ -22,7 +22,6 @@ object OptIns {
const val ExperimentalCoroutinesApi = "kotlinx.coroutines.ExperimentalCoroutinesApi"
const val DelicateCoroutinesApi = "kotlinx.coroutines.DelicateCoroutinesApi"

const val TransportApi = "io.rsocket.kotlin.TransportApi"
const val RSocketTransportApi = "io.rsocket.kotlin.transport.RSocketTransportApi"
const val ExperimentalMetadataApi = "io.rsocket.kotlin.ExperimentalMetadataApi"
const val ExperimentalStreamsApi = "io.rsocket.kotlin.ExperimentalStreamsApi"
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2015-2023 the original author or authors.
* Copyright 2015-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -21,6 +21,7 @@ package io.rsocket.kotlin
level = RequiresOptIn.Level.WARNING,
message = "This is an API which is used to implement transport for RSocket, such as WS or TCP. This API can change in future in non backwards-compatible manner."
)
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public annotation class TransportApi

@Retention(value = AnnotationRetention.BINARY)
Expand Down
Expand Up @@ -19,10 +19,7 @@ package io.rsocket.kotlin
import io.ktor.utils.io.core.*
import kotlinx.coroutines.*

/**
* That interface isn't stable for inheritance.
*/
@TransportApi
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public interface Connection : CoroutineScope {
public suspend fun send(packet: ByteReadPacket)
public suspend fun receive(): ByteReadPacket
Expand Down
Expand Up @@ -24,7 +24,7 @@ import io.rsocket.kotlin.transport.internal.*
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.*

@TransportApi
@Suppress("DEPRECATION_ERROR")
@RSocketTransportApi
internal suspend fun RSocketConnectionHandler.handleConnection(connection: Connection): Unit = coroutineScope {
val outboundQueue = PrioritizationFrameQueue(Channel.BUFFERED)
Expand All @@ -43,7 +43,7 @@ internal suspend fun RSocketConnectionHandler.handleConnection(connection: Conne
}
}

@TransportApi
@Suppress("DEPRECATION_ERROR")
@RSocketTransportApi
private class OldConnection(
private val outboundQueue: PrioritizationFrameQueue,
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2015-2022 the original author or authors.
* Copyright 2015-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -13,12 +13,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:OptIn(TransportApi::class)

package io.rsocket.kotlin.core

import io.rsocket.kotlin.*

@Suppress("DEPRECATION_ERROR")
public class InterceptorsBuilder internal constructor() {
private val requesters = mutableListOf<Interceptor<RSocket>>()
private val responders = mutableListOf<Interceptor<RSocket>>()
Expand All @@ -33,7 +33,7 @@ public class InterceptorsBuilder internal constructor() {
responders += interceptor
}

@TransportApi
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated without replacement")
public fun forConnection(interceptor: Interceptor<Connection>) {
connections += interceptor
}
Expand All @@ -45,6 +45,7 @@ public class InterceptorsBuilder internal constructor() {
internal fun build(): Interceptors = Interceptors(requesters, responders, connections, acceptors)
}

@Suppress("DEPRECATION_ERROR")
internal class Interceptors(
private val requesters: List<Interceptor<RSocket>>,
private val responders: List<Interceptor<RSocket>>,
Expand Down
Expand Up @@ -26,7 +26,7 @@ import io.rsocket.kotlin.transport.*
import kotlinx.coroutines.*
import kotlin.coroutines.*

@OptIn(TransportApi::class, RSocketTransportApi::class, RSocketLoggingApi::class)
@OptIn(RSocketTransportApi::class, RSocketLoggingApi::class)
public class RSocketConnector internal constructor(
loggerFactory: LoggerFactory,
private val maxFragmentSize: Int,
Expand All @@ -39,6 +39,8 @@ public class RSocketConnector internal constructor(
private val connectionLogger = loggerFactory.logger("io.rsocket.kotlin.connection")
private val frameLogger = loggerFactory.logger("io.rsocket.kotlin.frame")

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public suspend fun connect(transport: ClientTransport): RSocket = connect(object : RSocketClientTarget {
override val coroutineContext: CoroutineContext get() = transport.coroutineContext
override fun connectClient(handler: RSocketConnectionHandler): Job = launch {
Expand Down
Expand Up @@ -25,7 +25,7 @@ import io.rsocket.kotlin.logging.*
import io.rsocket.kotlin.transport.*
import kotlinx.coroutines.*

@OptIn(TransportApi::class, RSocketTransportApi::class, RSocketLoggingApi::class)
@OptIn(RSocketTransportApi::class, RSocketLoggingApi::class)
public class RSocketServer internal constructor(
loggerFactory: LoggerFactory,
private val maxFragmentSize: Int,
Expand All @@ -34,12 +34,16 @@ public class RSocketServer internal constructor(
) {
private val frameLogger = loggerFactory.logger("io.rsocket.kotlin.frame")

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
@DelicateCoroutinesApi
public fun <T> bind(
transport: ServerTransport<T>,
acceptor: ConnectionAcceptor,
): T = bindIn(GlobalScope, transport, acceptor)

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public fun <T> bindIn(
scope: CoroutineScope,
transport: ServerTransport<T>,
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2015-2022 the original author or authors.
* Copyright 2015-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -20,18 +20,17 @@ import io.rsocket.kotlin.*
import kotlinx.coroutines.*
import kotlin.coroutines.*

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public fun interface ClientTransport : CoroutineScope {
override val coroutineContext: CoroutineContext get() = EmptyCoroutineContext

@TransportApi
public suspend fun connect(): Connection
}

@TransportApi
@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public fun ClientTransport(coroutineContext: CoroutineContext, transport: ClientTransport): ClientTransport =
object : ClientTransport {
override val coroutineContext: CoroutineContext get() = coroutineContext

@TransportApi
override suspend fun connect(): Connection = transport.connect()
}
@@ -1,5 +1,5 @@
/*
* Copyright 2015-2022 the original author or authors.
* Copyright 2015-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -19,7 +19,8 @@ package io.rsocket.kotlin.transport
import io.rsocket.kotlin.*
import kotlinx.coroutines.*

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public fun interface ServerTransport<T> {
@TransportApi
public fun CoroutineScope.start(accept: suspend CoroutineScope.(Connection) -> Unit): T
}
Expand Up @@ -30,6 +30,7 @@ import kotlin.coroutines.*
import kotlin.test.*
import kotlin.time.Duration.Companion.seconds

@Suppress("DEPRECATION_ERROR")
class OldLocalRSocketTest : RSocketTest({ context, acceptor ->
val localServer = TestServer().bindIn(
CoroutineScope(context),
Expand Down
Expand Up @@ -40,9 +40,11 @@ abstract class TransportTest : SuspendTest, TestWithLeakCheck {

protected lateinit var client: RSocket

@Suppress("DEPRECATION_ERROR")
protected suspend fun connectClient(clientTransport: ClientTransport): RSocket =
CONNECTOR.connect(clientTransport)

@Suppress("DEPRECATION_ERROR")
protected fun <T> startServer(serverTransport: ServerTransport<T>): T =
SERVER.bindIn(testScope, serverTransport, ACCEPTOR)

Expand Down
Expand Up @@ -14,25 +14,27 @@
* limitations under the License.
*/

@file:OptIn(TransportApi::class)
@file:Suppress("FunctionName")

package io.rsocket.kotlin.transport.ktor.tcp

import io.ktor.network.selector.*
import io.ktor.network.sockets.*
import io.rsocket.kotlin.*
import io.rsocket.kotlin.transport.*
import kotlinx.coroutines.*
import kotlin.coroutines.*

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorTcpClientTransport")
public fun TcpClientTransport(
hostname: String, port: Int,
context: CoroutineContext = EmptyCoroutineContext,
intercept: (Socket) -> Socket = { it }, //f.e. for tls, which is currently supported by ktor only on JVM
configure: SocketOptions.TCPClientSocketOptions.() -> Unit = {},
): ClientTransport = TcpClientTransport(InetSocketAddress(hostname, port), context, intercept, configure)

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorTcpClientTransport")
public fun TcpClientTransport(
remoteAddress: InetSocketAddress,
context: CoroutineContext = EmptyCoroutineContext,
Expand Down
Expand Up @@ -20,17 +20,15 @@ import io.ktor.network.sockets.*
import io.ktor.util.cio.*
import io.ktor.utils.io.*
import io.ktor.utils.io.core.*
import io.rsocket.kotlin.*
import io.rsocket.kotlin.Connection
import io.rsocket.kotlin.internal.io.*
import kotlinx.coroutines.*
import kotlin.coroutines.*

@TransportApi
@Suppress("DEPRECATION_ERROR")
internal class TcpConnection(
socket: Socket,
override val coroutineContext: CoroutineContext,
) : Connection {
) : io.rsocket.kotlin.Connection {
private val socketConnection = socket.connection()

private val sendChannel = channelForCloseable<ByteReadPacket>(8)
Expand Down
Expand Up @@ -14,28 +14,31 @@
* limitations under the License.
*/

@file:OptIn(TransportApi::class)
@file:Suppress("FunctionName")

package io.rsocket.kotlin.transport.ktor.tcp

import io.ktor.network.selector.*
import io.ktor.network.sockets.*
import io.ktor.utils.io.core.*
import io.rsocket.kotlin.*
import io.rsocket.kotlin.transport.*
import kotlinx.coroutines.*

@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorTcpServerInstance")
public class TcpServer internal constructor(
public val handlerJob: Job,
public val serverSocket: Deferred<ServerSocket>
)

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorTcpServerTransport")
public fun TcpServerTransport(
hostname: String = "0.0.0.0", port: Int = 0,
configure: SocketOptions.AcceptorOptions.() -> Unit = {},
): ServerTransport<TcpServer> = TcpServerTransport(InetSocketAddress(hostname, port), configure)

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorTcpServerTransport")
public fun TcpServerTransport(
localAddress: InetSocketAddress? = null,
configure: SocketOptions.AcceptorOptions.() -> Unit = {},
Expand Down
Expand Up @@ -21,6 +21,7 @@ import io.ktor.network.sockets.*
import io.rsocket.kotlin.transport.tests.*
import kotlinx.coroutines.*

@Suppress("DEPRECATION_ERROR")
class TcpTransportTest : TransportTest() {
override suspend fun before() {
val serverSocket = startServer(TcpServerTransport()).serverSocket.await()
Expand Down
Expand Up @@ -14,7 +14,6 @@
* limitations under the License.
*/

@file:OptIn(TransportApi::class)
@file:Suppress("FunctionName")

package io.rsocket.kotlin.transport.ktor.websocket.client
Expand All @@ -24,14 +23,13 @@ import io.ktor.client.engine.*
import io.ktor.client.plugins.websocket.*
import io.ktor.client.request.*
import io.ktor.http.*
import io.rsocket.kotlin.*
import io.rsocket.kotlin.transport.*
import io.rsocket.kotlin.transport.ktor.websocket.internal.*
import kotlinx.coroutines.*
import kotlin.coroutines.*

//TODO: will be reworked later with transport API rework

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorWebSocketClientTransport")
public fun <T : HttpClientEngineConfig> WebSocketClientTransport(
engineFactory: HttpClientEngineFactory<T>,
context: CoroutineContext = EmptyCoroutineContext,
Expand Down Expand Up @@ -61,6 +59,8 @@ public fun <T : HttpClientEngineConfig> WebSocketClientTransport(
}
}

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorWebSocketClientTransport")
public fun <T : HttpClientEngineConfig> WebSocketClientTransport(
engineFactory: HttpClientEngineFactory<T>,
urlString: String, secure: Boolean = false,
Expand All @@ -77,6 +77,8 @@ public fun <T : HttpClientEngineConfig> WebSocketClientTransport(
request()
}

@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorWebSocketClientTransport")
public fun <T : HttpClientEngineConfig> WebSocketClientTransport(
engineFactory: HttpClientEngineFactory<T>,
host: String? = null,
Expand Down
Expand Up @@ -21,7 +21,8 @@ import io.ktor.websocket.*
import io.rsocket.kotlin.*
import kotlinx.coroutines.*

@TransportApi
@Suppress("DEPRECATION_ERROR")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API")
public class WebSocketConnection(
private val session: WebSocketSession,
) : Connection, CoroutineScope by session {
Expand Down
Expand Up @@ -20,11 +20,11 @@ import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.routing.*
import io.ktor.server.websocket.*
import io.rsocket.kotlin.*
import io.rsocket.kotlin.transport.*
import io.rsocket.kotlin.transport.ktor.websocket.internal.*

@Suppress("FunctionName")
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorWebSocketServerTransport")
@Suppress("DEPRECATION_ERROR", "FunctionName")
public fun <A : ApplicationEngine, T : ApplicationEngine.Configuration> WebSocketServerTransport(
engineFactory: ApplicationEngineFactory<A, T>,
port: Int = 80, host: String = "0.0.0.0",
Expand All @@ -43,8 +43,8 @@ public fun <A : ApplicationEngine, T : ApplicationEngine.Configuration> WebSocke
webSockets = webSockets,
)

@Suppress("FunctionName")
@OptIn(TransportApi::class)
@Deprecated(level = DeprecationLevel.ERROR, message = "Deprecated in favor of new Transport API, use KtorWebSocketServerTransport")
@Suppress("DEPRECATION_ERROR", "FunctionName")
public fun <A : ApplicationEngine, T : ApplicationEngine.Configuration> WebSocketServerTransport(
engineFactory: ApplicationEngineFactory<A, T>,
vararg connectors: EngineConnectorConfig,
Expand Down
Expand Up @@ -21,6 +21,7 @@ import io.ktor.server.engine.*
import io.rsocket.kotlin.transport.ktor.websocket.client.*
import io.rsocket.kotlin.transport.tests.*

@Suppress("DEPRECATION_ERROR")
abstract class WebSocketTransportTest(
private val clientEngine: HttpClientEngineFactory<*>,
private val serverEngine: ApplicationEngineFactory<*, *>,
Expand Down
Expand Up @@ -21,7 +21,7 @@ import io.rsocket.kotlin.*
import kotlinx.coroutines.channels.*
import kotlin.coroutines.*

@TransportApi
@Suppress("DEPRECATION_ERROR")
internal class LocalConnection(
private val sender: SendChannel<ByteReadPacket>,
private val receiver: ReceiveChannel<ByteReadPacket>,
Expand Down

0 comments on commit 6fcc361

Please sign in to comment.