From 17d2fd203e9a134e09351bb0d154ecd364beb944 Mon Sep 17 00:00:00 2001 From: Piasy Date: Thu, 17 Jul 2025 22:38:28 +0800 Subject: [PATCH 1/4] upgrade deps --- buildSrc/src/main/kotlin/Constants.kt | 2 +- gradle/libs.versions.toml | 15 +++++++-------- kmp-socketio/build.gradle.kts | 8 +++----- .../kmp/socketio/engineio/transports/WebSocket.kt | 12 +++++++----- .../kmp/socketio/engineio/transports/transport.kt | 6 +++--- .../socketio/engineio/transports/WebSocketTest.kt | 4 ++-- 6 files changed, 23 insertions(+), 24 deletions(-) diff --git a/buildSrc/src/main/kotlin/Constants.kt b/buildSrc/src/main/kotlin/Constants.kt index 4b395bf..dafc3f3 100644 --- a/buildSrc/src/main/kotlin/Constants.kt +++ b/buildSrc/src/main/kotlin/Constants.kt @@ -1,7 +1,7 @@ object Consts { const val releaseGroup = "com.piasy" const val releaseName = "kmp-socketio" - const val releaseVersion = "1.3.1" + const val releaseVersion = "1.3.2" val androidNS = "$releaseGroup.${releaseName.replace('-', '.')}" } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1515b3b..70d7cef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,22 +5,21 @@ compileSdk = "35" minSdk = "21" targetSdk = "35" agp = "8.7.3" -kotlin = "2.1.10" -mockk = "1.13.16" +kotlin = "2.2.0" ktor = "3.2.2" -coroutine = "1.10.1" -compose = "1.7.8" +coroutine = "1.10.2" +compose = "1.8.3" [libraries] junit = "junit:junit:4.13.2" hamcrest = "org.hamcrest:hamcrest-library:3.0" kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } -mockk = { module = "io.mockk:mockk", version.ref = "mockk" } +mockk = "io.mockk:mockk:1.14.4" kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutine" } json = "org.json:json:20250107" kommand = "com.kgit2:kommand:2.3.0" -socketioParser = "org.hildan.socketio:socketio-kotlin:2.0.0" +socketioParser = "org.hildan.socketio:socketio-kotlin:2.6.0" kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutine" } ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } ktor-client-websockets = { module = "io.ktor:ktor-client-websockets", version.ref = "ktor" } @@ -48,7 +47,7 @@ android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kmp = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } -versions = "com.github.ben-manes.versions:0.51.0" -versionUpdate = "nl.littlerobots.version-catalog-update:0.8.5" +versions = "com.github.ben-manes.versions:0.52.0" +versionUpdate = "nl.littlerobots.version-catalog-update:1.0.0" vanniktech-mavenPublish = "com.vanniktech.maven.publish:0.30.0" kover = "org.jetbrains.kotlinx.kover:0.9.1" diff --git a/kmp-socketio/build.gradle.kts b/kmp-socketio/build.gradle.kts index 958db40..9ea7eb6 100644 --- a/kmp-socketio/build.gradle.kts +++ b/kmp-socketio/build.gradle.kts @@ -10,9 +10,7 @@ version = Consts.releaseVersion group = Consts.releaseGroup kotlin { - jvm { - withJava() - } + jvm() iosArm64() iosSimulatorArm64() @@ -26,8 +24,8 @@ kotlin { binaries.executable() } - mingwX64 {} - linuxX64 {} + mingwX64() + linuxX64() applyDefaultHierarchyTemplate() sourceSets { diff --git a/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocket.kt b/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocket.kt index d82d5ed..c73aa2f 100644 --- a/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocket.kt +++ b/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocket.kt @@ -25,7 +25,7 @@ open class WebSocket( private val factory: HttpClientFactory = DefaultHttpClientFactory(trustAllCerts = opt.trustAllCerts), rawMessage: Boolean, ) : Transport(opt, scope, NAME, rawMessage) { - private var ws: DefaultClientWebSocketSession? = null + private var ws: WebSocketSession? = null @WorkThread override fun pause(onPause: () -> Unit) { @@ -49,10 +49,12 @@ open class WebSocket( } }) { ws = this - val respHeaders = call.response.headers.toMap() - scope.launch { - emit(EVENT_RESPONSE_HEADERS, respHeaders) - onOpen() + if (this is DefaultClientWebSocketSession) { + val respHeaders = call.response.headers.toMap() + scope.launch { + emit(EVENT_RESPONSE_HEADERS, respHeaders) + onOpen() + } } listen() diff --git a/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport.kt b/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport.kt index 8ad652b..2902378 100644 --- a/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport.kt +++ b/kmp-socketio/src/commonMain/kotlin/com/piasy/kmp/socketio/engineio/transports/transport.kt @@ -1,7 +1,6 @@ package com.piasy.kmp.socketio.engineio.transports import com.piasy.kmp.socketio.engineio.Transport -import com.piasy.kmp.xlog.Platform import io.ktor.client.HttpClientConfig import io.ktor.client.HttpClient import io.ktor.client.plugins.logging.* @@ -9,6 +8,7 @@ import io.ktor.client.plugins.websocket.* import io.ktor.client.request.* import io.ktor.client.statement.* import io.ktor.http.* +import io.ktor.websocket.WebSocketSession import kotlinx.coroutines.CoroutineScope expect fun httpClient(trustAllCerts: Boolean = false, config: HttpClientConfig<*>.() -> Unit = {}): HttpClient @@ -50,7 +50,7 @@ interface HttpClientFactory { suspend fun createWs( url: String, request: HttpRequestBuilder.() -> Unit, - block: suspend DefaultClientWebSocketSession.() -> Unit, + block: suspend WebSocketSession.() -> Unit, ) suspend fun httpRequest( @@ -85,7 +85,7 @@ class DefaultHttpClientFactory( override suspend fun createWs( url: String, request: HttpRequestBuilder.() -> Unit, - block: suspend DefaultClientWebSocketSession.() -> Unit, + block: suspend WebSocketSession.() -> Unit, ) = wsClient.webSocket(url, request, block) override suspend fun httpRequest( diff --git a/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt b/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt index a820832..0df3123 100644 --- a/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt +++ b/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt @@ -19,7 +19,7 @@ class WebSocketTest : BaseTest() { scope: CoroutineScope, incomingWait: Boolean = true ): TestWs { - val ws = mockk(relaxed = true) + val ws = mockk(relaxed = true) val incoming = mockk>() if (incomingWait) { @@ -33,7 +33,7 @@ class WebSocketTest : BaseTest() { val factory = mockk() val requestBuilder = slot Unit>() - val block = slot Unit>() + val block = slot Unit>() coEvery { factory.createWs(any(), capture(requestBuilder), capture(block)) } coAnswers { requestBuilder.captured(HttpRequestBuilder()) block.captured(ws) From 1a7b9c23e576fda80da8b645dcfc08f4ff59c45d Mon Sep 17 00:00:00 2001 From: Piasy Date: Thu, 17 Jul 2025 22:57:19 +0800 Subject: [PATCH 2/4] fix ut --- .../src/jvmTest/java/io/socket/client/ConnectionTest.java | 2 +- .../com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kmp-socketio/src/jvmTest/java/io/socket/client/ConnectionTest.java b/kmp-socketio/src/jvmTest/java/io/socket/client/ConnectionTest.java index cc3d7a0..2b1a714 100644 --- a/kmp-socketio/src/jvmTest/java/io/socket/client/ConnectionTest.java +++ b/kmp-socketio/src/jvmTest/java/io/socket/client/ConnectionTest.java @@ -449,7 +449,7 @@ public void call(Object... args) { assertThat((Integer)values.take(), is(2)); } - @Test(timeout = TIMEOUT) + @Test(timeout = TIMEOUT * 2) public void reconnectDelayShouldIncreaseEveryTime() throws InterruptedException { final BlockingQueue values = new LinkedBlockingQueue<>(); IO.Options opts = createOptions(); diff --git a/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt b/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt index 0df3123..06208df 100644 --- a/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt +++ b/kmp-socketio/src/jvmTest/kotlin/com/piasy/kmp/socketio/engineio/transports/WebSocketTest.kt @@ -19,7 +19,7 @@ class WebSocketTest : BaseTest() { scope: CoroutineScope, incomingWait: Boolean = true ): TestWs { - val ws = mockk(relaxed = true) + val ws = mockk(relaxed = true) val incoming = mockk>() if (incomingWait) { From cdd4df310919e46926dbdddad08dfa6707955ac4 Mon Sep 17 00:00:00 2001 From: Piasy Date: Fri, 18 Jul 2025 08:38:06 +0800 Subject: [PATCH 3/4] kotlinUpgradeYarnLock --- kotlin-js-store/yarn.lock | 5 ----- 1 file changed, 5 deletions(-) diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 9f04945..102c4bd 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -2488,11 +2488,6 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typescript@5.5.4: - version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== - ua-parser-js@^0.7.30: version "0.7.32" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.32.tgz#cd8c639cdca949e30fa68c44b7813ef13e36d211" From c6f877c836b0d23dc7db7e7a2da7274e48a1c87f Mon Sep 17 00:00:00 2001 From: Piasy Date: Fri, 18 Jul 2025 09:00:45 +0800 Subject: [PATCH 4/4] fix js test local run --- .../com/piasy/kmp/socketio/socketio/ConnectionTest.kt | 4 ++-- kmp-socketio/src/jvmTest/resources/socket-server.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/kmp-socketio/src/commonTest/kotlin/com/piasy/kmp/socketio/socketio/ConnectionTest.kt b/kmp-socketio/src/commonTest/kotlin/com/piasy/kmp/socketio/socketio/ConnectionTest.kt index 025850e..83774ba 100644 --- a/kmp-socketio/src/commonTest/kotlin/com/piasy/kmp/socketio/socketio/ConnectionTest.kt +++ b/kmp-socketio/src/commonTest/kotlin/com/piasy/kmp/socketio/socketio/ConnectionTest.kt @@ -83,7 +83,7 @@ abstract class ConnectionTest { ) val responseResult = runCatching { trustAllCertsHttpClientFactory.httpRequest( - url = "https://expired.badssl.com/", + url = "https://localhost:8443/", ) {} } assertTrue(responseResult.isSuccess) @@ -97,7 +97,7 @@ abstract class ConnectionTest { ) val responseResult = runCatching { trustAllCertsHttpClientFactory.httpRequest( - url = "https://expired.badssl.com/", + url = "https://localhost:8443/", ) {} } assertTrue(responseResult.isFailure) diff --git a/kmp-socketio/src/jvmTest/resources/socket-server.js b/kmp-socketio/src/jvmTest/resources/socket-server.js index 92cb434..77b449e 100644 --- a/kmp-socketio/src/jvmTest/resources/socket-server.js +++ b/kmp-socketio/src/jvmTest/resources/socket-server.js @@ -146,3 +146,14 @@ before(io.engine, 'handleUpgrade', function(req, socket, head) { server.listen(port, function() { console.log('Socket.IO server listening on port', port); }); + +https_server = require('https').createServer({ + key: fs.readFileSync(__dirname + '/key.pem'), + cert: fs.readFileSync(__dirname + '/cert.pem') +}, (req, res) => { + console.log('got https req'); + res.end('self signed https server'); +}); +https_server.listen(8443, function() { + console.log('https server listening on port 8443'); +});