Skip to content

Commit d7654ca

Browse files
committed
Update samples tp 0.6.1 (#319)
1 parent c92bd66 commit d7654ca

File tree

26 files changed

+93
-103
lines changed

26 files changed

+93
-103
lines changed

samples/ktor-all-platforms-app/composeApp/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ plugins {
1313
alias(libs.plugins.androidApplication)
1414
alias(libs.plugins.jetbrainsCompose)
1515
alias(libs.plugins.compose.compiler)
16+
alias(libs.plugins.kotlinx.rpc)
1617
}
1718

1819
kotlin {

samples/ktor-all-platforms-app/composeApp/src/commonMain/kotlin/App.kt

+2-4
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,8 @@ fun App() {
6666
}
6767

6868
LaunchedEffect(service) {
69-
streamScoped {
70-
service.subscribeToNews().collect { article ->
71-
news.add(article)
72-
}
69+
service.subscribeToNews().collect { article ->
70+
news.add(article)
7371
}
7472
}
7573

samples/ktor-all-platforms-app/gradle/libs.versions.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[versions]
2-
kotlin = "2.1.10"
2+
kotlin = "2.1.20"
33

44
agp = "8.8.0-alpha05"
55
android-compileSdk = "35"
@@ -19,7 +19,7 @@ ktor = "3.0.3"
1919
logback = "1.5.16"
2020
serialization = "1.8.0"
2121
coroutines = "1.10.1"
22-
kotlinx-rpc = "0.5.1"
22+
kotlinx-rpc = "0.6.1"
2323

2424
[libraries]
2525
# kotlin

samples/ktor-all-platforms-app/server/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
plugins {
66
alias(libs.plugins.kotlinJvm)
77
alias(libs.plugins.ktor)
8+
alias(libs.plugins.kotlinx.rpc)
89
application
910
}
1011

samples/ktor-all-platforms-app/server/src/main/kotlin/kotlinx/rpc/sample/UserServiceImpl.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class UserServiceImpl(override val coroutineContext: CoroutineContext) : UserSer
1616
return "Nice to meet you $user, how is it in ${userData.address}?"
1717
}
1818

19-
override suspend fun subscribeToNews(): Flow<String> {
19+
override fun subscribeToNews(): Flow<String> {
2020
return flow {
2121
repeat(10) {
2222
delay(300)

samples/ktor-all-platforms-app/server/src/test/kotlin/kotlinx/rpc/sample/ApplicationTest.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ class ApplicationTest {
3535
actual = service.hello("Alex", UserData("address1", "last")),
3636
)
3737

38-
streamScoped {
39-
assertEquals(
40-
expected = List(10) { "Article number $it" },
41-
actual = service.subscribeToNews().toList(),
42-
)
43-
}
38+
assertEquals(
39+
expected = List(10) { "Article number $it" },
40+
actual = service.subscribeToNews().toList(),
41+
)
4442
}
4543
}

samples/ktor-all-platforms-app/shared/src/commonMain/kotlin/UserService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ data class UserData(
1717
interface UserService : RemoteService {
1818
suspend fun hello(user: String, userData: UserData): String
1919

20-
suspend fun subscribeToNews(): Flow<String>
20+
fun subscribeToNews(): Flow<String>
2121
}

samples/ktor-android-app/app/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ plugins {
77
alias(libs.plugins.kotlinAndroid)
88
alias(libs.plugins.kotlinPluginSerialization)
99
alias(libs.plugins.compose.compiler)
10+
alias(libs.plugins.kotlinx.rpc)
1011
}
1112

1213
android {

samples/ktor-android-app/app/src/main/kotlin/kotlinx/rpc/sample/ui/AppViewModel.kt

+14-18
Original file line numberDiff line numberDiff line change
@@ -39,27 +39,23 @@ class AppViewModel : ViewModel() {
3939

4040
private fun fetchData() {
4141
viewModelScope.launch(Dispatchers.IO) {
42-
streamScoped {
43-
delay(2000)
44-
val greetingDeferred = async {
45-
apiService?.hello(
46-
"Alex",
47-
UserData("Berlin", "Smith")
48-
)
49-
}
50-
val newsDeferred = async { apiService?.subscribeToNews() }
42+
delay(2000)
43+
val greetingDeferred = async {
44+
apiService?.hello(
45+
"Alex",
46+
UserData("Berlin", "Smith")
47+
)
48+
}
5149

52-
val serverGreeting = greetingDeferred.await()
53-
val news = newsDeferred.await()
50+
val serverGreeting = greetingDeferred.await()
5451

55-
val allNews: MutableList<String> = mutableListOf()
56-
news?.collect {
57-
allNews += it
52+
val allNews: MutableList<String> = mutableListOf()
53+
apiService?.subscribeToNews()?.collect {
54+
allNews += it
5855

59-
val sendNews = allNews.toMutableList() // fix ConcurrentModificationException
60-
serverGreeting?.let {
61-
_uiState.value = WelcomeData(serverGreeting, sendNews)
62-
}
56+
val sendNews = allNews.toMutableList() // fix ConcurrentModificationException
57+
serverGreeting?.let {
58+
_uiState.value = WelcomeData(serverGreeting, sendNews)
6359
}
6460
}
6561
}

samples/ktor-android-app/common/src/main/kotlin/kotlinx/rpc/sample/MyService.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ import kotlinx.rpc.annotations.Rpc
1212
interface MyService : RemoteService {
1313
suspend fun hello(user: String, userData: UserData): String
1414

15-
suspend fun subscribeToNews(): Flow<String>
15+
fun subscribeToNews(): Flow<String>
1616
}

samples/ktor-android-app/gradle/libs.versions.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[versions]
22
agp = "8.8.0"
3-
kotlin = "2.1.10"
3+
kotlin = "2.1.20"
44
androidx-activityCompose = "1.9.3"
55
androidx-appcompat = "1.7.0"
66
androidx-constraintlayout = "2.2.0"
@@ -15,7 +15,7 @@ ktor = "3.0.3"
1515
kotlinx-serialization-json = "1.8.0"
1616
kotlinx-coroutines-core = "1.10.1"
1717
logback = "1.5.16"
18-
kotlinx-rpc = "0.5.1"
18+
kotlinx-rpc = "0.6.1"
1919

2020
[libraries]
2121
# kotlin

samples/ktor-android-app/server/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ plugins {
66
alias(libs.plugins.kotlinJvm)
77
alias(libs.plugins.kotlinPluginSerialization)
88
alias(libs.plugins.ktor)
9+
alias(libs.plugins.kotlinx.rpc)
910

1011
application
1112
distribution

samples/ktor-android-app/server/src/main/kotlin/kotlinx/rpc/sample/MyServiceImpl.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ class MyServiceImpl(override val coroutineContext: CoroutineContext) : MyService
1414
return "Nice to meet you $user, how is it in ${userData.address}?"
1515
}
1616

17-
override suspend fun subscribeToNews(): Flow<String> {
17+
override fun subscribeToNews(): Flow<String> {
1818
return flow {
1919
repeat(10) {
20-
delay(2000)
20+
delay(200)
2121
emit("Article number $it")
2222
}
2323
}

samples/ktor-android-app/server/src/test/kotlin/ApplicationTest.kt

+9-7
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,20 @@ import kotlinx.rpc.krpc.ktor.client.installKrpc
1313
import kotlinx.rpc.krpc.ktor.client.rpc
1414
import kotlinx.rpc.krpc.ktor.client.rpcConfig
1515
import kotlinx.rpc.krpc.serialization.json.json
16-
import kotlinx.rpc.krpc.streamScoped
1716
import kotlinx.rpc.withService
1817
import kotlinx.rpc.sample.MyService
1918
import kotlinx.rpc.sample.UserData
19+
import kotlinx.rpc.sample.module
2020
import kotlin.test.Test
2121
import kotlin.test.assertEquals
2222

2323
class ApplicationTest {
2424
@Test
2525
fun testRoot() = testApplication {
26+
application {
27+
module()
28+
}
29+
2630
val service = createClient {
2731
installKrpc()
2832
}.rpc("/api") {
@@ -38,12 +42,10 @@ class ApplicationTest {
3842
actual = service.hello("Alex", UserData("address1", "last")),
3943
)
4044

41-
streamScoped {
42-
assertEquals(
43-
expected = List(10) { "Article number $it" },
44-
actual = service.subscribeToNews().toList(),
45-
)
46-
}
45+
assertEquals(
46+
expected = List(10) { "Article number $it" },
47+
actual = service.subscribeToNews().toList(),
48+
)
4749
}
4850

4951
@Test

samples/ktor-web-app/common/src/commonMain/kotlin/Common.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ data class UserData(
1717
interface MyService : RemoteService {
1818
suspend fun hello(user: String, userData: UserData): String
1919

20-
suspend fun subscribeToNews(): Flow<String>
20+
fun subscribeToNews(): Flow<String>
2121
}

samples/ktor-web-app/frontend/build.gradle.kts

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
plugins {
66
kotlin("multiplatform")
7-
alias(libs.plugins.kotlin.plugin.serialization)
7+
alias(libs.plugins.kotlinx.rpc)
88
}
99

1010
kotlin {
@@ -32,10 +32,11 @@ kotlin {
3232
implementation(libs.kotlinx.rpc.krpc.ktor.client)
3333
implementation(libs.kotlinx.rpc.krpc.serialization.json)
3434

35-
implementation(project.dependencies.platform(libs.kotlin.wrappers.bom))
35+
implementation(project.dependencies.enforcedPlatform(libs.kotlin.wrappers.bom))
3636
implementation(libs.react)
3737
implementation(libs.react.dom)
38-
implementation(libs.emotion)
38+
implementation(libs.emotion.css)
39+
implementation(libs.emotion.react)
3940
}
4041
}
4142
}

samples/ktor-web-app/frontend/src/jsMain/kotlin/App.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ val AppContainer = FC<AppContainerProps> { props ->
4444
data?.also { welcomeData ->
4545
Welcome {
4646
this.data = welcomeData
47-
this.service = service
47+
this.news = service.subscribeToNews()
4848
}
4949
} ?: run {
5050
div {

samples/ktor-web-app/frontend/src/jsMain/kotlin/Welcome.kt

+8-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44

55
import emotion.react.css
6-
import kotlinx.rpc.krpc.streamScoped
6+
import kotlinx.coroutines.flow.Flow
77
import react.FC
88
import react.Props
99
import react.dom.html.ReactHTML.div
@@ -20,29 +20,27 @@ data class WelcomeData(
2020
)
2121

2222
external interface WelcomeProps : Props {
23-
var service: MyService
23+
var news: Flow<String>
2424
var data: WelcomeData
2525
}
2626

27-
fun useArticles(service: MyService): List<String> {
27+
fun useArticles(news: Flow<String>): List<String> {
2828
var articles by useState(emptyList<String>())
2929

3030
useEffectOnce {
3131
var localArticles = articles
32-
streamScoped {
33-
service.subscribeToNews().collect {
34-
@Suppress("SuspiciousCollectionReassignment")
35-
localArticles += it
36-
articles = localArticles
37-
}
32+
news.collect {
33+
@Suppress("SuspiciousCollectionReassignment")
34+
localArticles += it
35+
articles = localArticles
3836
}
3937
}
4038

4139
return articles
4240
}
4341

4442
val Welcome = FC<WelcomeProps> { props ->
45-
val articles = useArticles(props.service)
43+
val articles = useArticles(props.news)
4644

4745
div {
4846
css {

samples/ktor-web-app/gradle/libs.versions.toml

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
[versions]
2-
kotlin = "2.1.10"
3-
kotlin-wrappers-bom = "2025.1.2"
2+
kotlin = "2.1.20"
3+
kotlin-wrappers-bom = "2025.4.8"
44
ktor = "3.0.3"
55
kotlinx-serialization-json = "1.8.0"
66
kotlinx-coroutines-core = "1.10.1"
77
logback = "1.5.16"
8-
kotlinx-rpc = "0.5.1"
8+
kotlinx-rpc = "0.6.1"
99

1010
[libraries]
1111
# kotlin
@@ -23,7 +23,8 @@ kotlinx-coroutines-core-jvm = { module = "org.jetbrains.kotlinx:kotlinx-coroutin
2323
kotlin-wrappers-bom = { module = "org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom", version.ref = "kotlin-wrappers-bom" }
2424
react = { module = "org.jetbrains.kotlin-wrappers:kotlin-react" }
2525
react-dom = { module = "org.jetbrains.kotlin-wrappers:kotlin-react-dom" }
26-
emotion = { module = "org.jetbrains.kotlin-wrappers:kotlin-emotion" }
26+
emotion-css = { module = "org.jetbrains.kotlin-wrappers:kotlin-emotion-css" }
27+
emotion-react = { module = "org.jetbrains.kotlin-wrappers:kotlin-emotion-react" }
2728

2829
# ktor
2930
ktor-server-cio = { module = "io.ktor:ktor-server-cio", version.ref = "ktor" }

samples/ktor-web-app/server/build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
plugins {
66
kotlin("jvm")
77
alias(libs.plugins.kotlin.plugin.serialization)
8+
alias(libs.plugins.kotlinx.rpc)
89
application
910
distribution
1011
}

samples/ktor-web-app/server/src/main/kotlin/MyServiceImpl.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class MyServiceImpl(override val coroutineContext: CoroutineContext) : MyService
1212
return "Nice to meet you $user, how is it in ${userData.address}?"
1313
}
1414

15-
override suspend fun subscribeToNews(): Flow<String> {
15+
override fun subscribeToNews(): Flow<String> {
1616
return flow {
1717
repeat(10) {
1818
delay(2000)

samples/ktor-web-app/server/src/test/kotlin/ApplicationTest.kt

+4-6
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ class ApplicationTest {
3535
actual = service.hello("Alex", UserData("address1", "last")),
3636
)
3737

38-
streamScoped {
39-
assertEquals(
40-
expected = List(10) { "Article number $it" },
41-
actual = service.subscribeToNews().toList(),
42-
)
43-
}
38+
assertEquals(
39+
expected = List(10) { "Article number $it" },
40+
actual = service.subscribeToNews().toList(),
41+
)
4442
}
4543
}

samples/simple-ktor-app/build.gradle.kts

+9-9
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
*/
44

55
plugins {
6-
kotlin("jvm") version "2.1.10"
7-
kotlin("plugin.serialization") version "2.1.10"
6+
kotlin("jvm") version "2.1.20"
7+
kotlin("plugin.serialization") version "2.1.20"
88
id("io.ktor.plugin") version "3.0.3"
9-
id("org.jetbrains.kotlinx.rpc.plugin") version "0.5.1"
9+
id("org.jetbrains.kotlinx.rpc.plugin") version "0.6.1"
1010
}
1111

1212
group = "kotlinx.rpc.sample"
@@ -28,17 +28,17 @@ kotlin {
2828
}
2929

3030
dependencies {
31-
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-client:0.5.1")
32-
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-server:0.5.1")
33-
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-serialization-json:0.5.1")
31+
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-client:0.6.1")
32+
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-server:0.6.1")
33+
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-serialization-json:0.6.1")
3434

35-
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-client:0.5.1")
36-
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-server:0.5.1")
35+
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-client:0.6.1")
36+
implementation("org.jetbrains.kotlinx:kotlinx-rpc-krpc-ktor-server:0.6.1")
3737

3838
implementation("io.ktor:ktor-client-cio")
3939
implementation("io.ktor:ktor-server-netty-jvm")
4040
implementation("ch.qos.logback:logback-classic:1.5.16")
4141

4242
testImplementation("io.ktor:ktor-server-test-host")
43-
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.1.10")
43+
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:2.1.20")
4444
}

0 commit comments

Comments
 (0)