Skip to content

nice77/kmp-socketio

 
 

Repository files navigation

kmp-socketio

KMP (pure Kotlin) implementation of SocketIO client.

Maven Central Version Main branch status Coverage

Supported platforms

Platform 🛠Builds🛠 + 🔬Tests🔬
JVM 17 🚀
JS (Chrome) 🚀
Android 🚀
iOS 🚀
macOS 🚀
Windows X64 🚀
Linux X64 🚀

Dependency

You only need to add gradle dependency:

// add common source set dependency kotlin { sourceSets { val commonMain by getting { dependencies { implementation("com.piasy:kmp-socketio:$version") } } } }

Usage

IO.socket("http://localhost:3000", IO.Options()) { socket -> socket.on(Socket.EVENT_CONNECT) { args -> println("on connect ${args.joinToString()}") val bin = UnsafeByteStringOperations.wrapUnsafe(byteArrayOf(0x1, 0x3, 0x1, 0x4)) socket.emit("echo", 1, "2", bin, GMTDate()) }.on("echoBack") { args -> println("on echoBack ${args.joinToString()}") } socket.open() }

Most of the APIs are the same as socket.io-client-java, here are some differences:

  • Create socket is asynchronous, to make it's easier to guarantee thread safety.
  • Binary messages can't be nested, because emit only accepts String/Boolean/Number/JsonElement/ByteString, other types will be converted to String using toString(), so there is no way to put ByteString in JsonElement.

Logging with kmp-xlog

Development

To check coverage details, run ./gradlew :kmp-socketio:jvmTest --info && ./gradlew koverHtmlReport, then check kmp-socketio/build/reports/kover/html/index.html.

Example

Before running examples, run node kmp-socketio/src/jvmTest/resources/socket-server.js to start the socket-io echo server, and update the local IP address in example/shared/src/commonMain/kotlin/com/piasy/kmp/socketio/example/Greeting.kt.

Android

Open the project (the repo root dir) in Android studio, and run the example.androidApp target.

iOS

brew install cocoapods xcodegen # if you have installed them earlier, you need to remove them at first, # or run brew link --overwrite xcodegen cocoapods cd example/iosApp xcodegen pod install # open iosApp.xcworkspace in Xcode, and run it.

JS

Use Chrome CORS Unblock extension to workaround with CORS error.

./gradlew :example:shared:jsBrowserRun

Windows

.\gradlew runKmp_socketioDebugExecutableMingwX64

Linux

./gradlew runKmp_socketioDebugExecutableLinuxX64

macOS

./gradlew runKmp_socketioDebugExecutableMacosX64

Publish

Maven central portal credentials and signing configs are set in ~/.gradle/gradle.properties.

# on Linux: need manual release on website ./gradlew clean publishLinuxX64PublicationToMavenCentralRepository --no-configuration-cache # on Windows: need manual release on website .\gradlew clean publishMingwX64PublicationToMavenCentralRepository --no-configuration-cache # on macOS: need manual release on website ./gradlew clean \ publishKotlinMultiplatformPublicationToMavenCentralRepository \ publishJvmPublicationToMavenCentralRepository \ publishIosArm64PublicationToMavenCentralRepository \ publishIosSimulatorArm64PublicationToMavenCentralRepository \ publishIosX64PublicationToMavenCentralRepository \ publishMacosArm64PublicationToMavenCentralRepository \ publishMacosX64PublicationToMavenCentralRepository \ publishJsPublicationToMavenCentralRepository \ --no-configuration-cache

Login to https://central.sonatype.com/publishing/deployments, and release them manually.

Credit

About

KMP (pure Kotlin) implementation of SocketIO client.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 50.2%
  • Kotlin 47.7%
  • JavaScript 1.7%
  • Swift 0.1%
  • PowerShell 0.1%
  • Shell 0.1%
  • Other 0.1%