Repository navigation
Add a Kotlin client for Android and the JVM - #78
Merged
Merged
Conversation
The fifth client, built the way the Swift one is: a full SignalR client of its own (negotiate, WebSockets, SSE and Long Polling with fallback, JSON and MessagePack, keep-alive, server timeout, automatic reconnection) instead of a wrapper around Microsoft's Java client, which has no reconnect, no SSE and leaks RxJava into the API. Coroutines and Flow are the async model; the full SignalARRR surface is covered: token challenges, structured errors with codes, server-to-client handlers, stream handlers, HTTP stream references in both directions, and cancellation as structured coroutine cancellation. @hubproxy interfaces get a typed proxy from a KSP processor; ProxyKind addresses contract interfaces, ServerMethods classes and hub methods, and camelCase members map to PascalCase by default because the server lookup is case-sensitive. 102 unit tests, 66 integration tests against the shared test server over all three transports. Docs, README, changelog, skill, CI and the integration script are updated; the Kotlin integration tests join the cross-platform job. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
src/Cocoar.SignalARRR.Kotlin/—dev.cocoar:signalarrr(runtime) anddev.cocoar:signalarrr-ksp(typed proxies). Own transport like the Swift client: negotiate, WebSockets/SSE/Long Polling with fallback, JSON + MessagePack, keep-alive, server timeout, auto-reconnect. Coroutines +Flow;HARRRExceptionwith error codes;onServerMethod/registerInterface/stream handlers; HTTP stream references both ways; server cancellation as structured coroutine cancellation.@HubProxy(name, pascalCase, kind = INTERFACE | SERVER_METHODS | HUB),@HubMethod,@GenericArguments.test-kotlinjob (unit tests + KSP) on PR and develop; Java/Gradle added to the cross-platform integration job;scripts/run-integration-tests.sh kotlin.Why not Microsoft's Java client
No automatic reconnect, no SSE / transport fallback, RxJava3 leaks into the API, open
stream()memory leak, Android 7 regression in the MessagePack package. The parity table would have lost three rows.Test plan
./gradlew :signalarrr:test) — protocols, MessagePack framing, error envelope, references, JsonValues, URLs, SignalRClient on MockWebServerOpen
Maven Central publishing is not wired into CD yet —
maven-publishis configured,publishToMavenLocal -Pversion=…works, but a Sonatype account and GPG signing secrets are needed for the release job. Docs reference5.2.0as the first published version.🤖 Generated with Claude Code