- Document
URLSessionWebSocketTask
in readme - Fix: add
@unknown default
toURLSessionTask.State
ext switch
- Add alternative websocket implementation via URLSessionWebSocketTask (should be explicitly enabled)
- Prevent memory leaks when passing token getters
- Make
info
field ofCentrifugePublicationEvent
andCentrifugeServerPublicationEvent
public.
Breaking change! This release changes the semantics of working with connection tokens described in Centrifugo v5 release post.
Previously, returning an empty token string from CentrifugeConnectionTokenGetter
callback resulted in client disconnection with unauthorized reason.
Now returning an empty string from CentrifugeConnectionTokenGetter
is a valid scenario which won't result into disconnect on the client side. It's still possible to disconnect client by returning a special CentrifugeError.unauthorized
from CentrifugeConnectionTokenGetter
.
And we are putting back SetToken
method to the SDK – so it's now possible to reset the token to be empty upon user logout.
- Improve logger API: replace String with StaticString #74
- Fix: unset refreshRequired flag after getting connection token commit
- Fix connect when initial connection token not set but provided
tokenGetter
#71
- Fix crashes caused by non-synchronized memory access upon getting
no ping
disconnect - Fix issuing duplicate state change events
Breaking changes
This release adopts a new iteration of Centrifugal protocol and a new iteration of API. Client now behaves according to the client SDK API specification. The work has been done according to Centrifugo v4 roadmap.
Check out Centrifugo v4 release post that covers the reasoning behind changes here.
New release only works with Centrifugo >= v4.0.0 and Centrifuge >= 0.25.0. See Centrifugo v4 migration guide for details about the changes in the ecosystem.
Note, that Centrifugo v4 supports clients working over the previous protocol iteration, so you can update Centrifugo to v4 without any changes on the client side (but you need to turn on use_client_protocol_v1_by_default
option in the configuration of Centrifugo, see Centrifugo v4 migration guide for details).
Several important changes:
- new API according to the new SDK API specification
- all core features of Centrifugal client protocol are now supported
- delegateQueue to which Client submitted events is removed, it's now up to developer to utilize queues for processing callbacks
- SDK now uses Swift 5.0
- Fix crash accessing serverSubs from non-syncQueue #65
- Fix possible crash in handleAsyncData method – #62
- Remove Starscream code that automatically set Origin header
- Embed Starscream 3 – see discussion and pr #53.
- Support CentrifugeClientInfo in history publications.
- Use Client's sync queue for Subscription operations (previously each Subscription had its own sync queue). Fixes #24
- Fix
already subscribed
errors (code 105) on resubscribe after Subscription removing. Fixes #49
Update to work with Centrifuge >= v0.18.0 and Centrifugo v3.
Breaking change in server behavior. Client History API behavior changed in Centrifuge >= v0.18.0 and Centrifugo >= v3.0.0. When using history call it won't return all publications in a stream by default. See Centrifuge v0.18.0 release notes or Centrifugo v3 migration guide for more information and workaround on server-side.
- Protocol definitions updated to the latest version
- History method now accepts optional
limit
,since
andreverse
arguments and returnsCentrifugeHistoryResult
- presence now returns
CentrifugePresenceResult
- presenceStats now returns
CentrifugePresenceStatsResult
- Publish now returns
CentrifugePublishResult
- When working with Centrifugo v3 or Centrifuge >= v0.18.0 it's now possible to avoid using
?format=protobuf
in connection URL. Client will negotiate Protobuf protocol with a server using WebSocket subprotocol mechanism (in request headers).
- Fix internal error handling in subscription reply – now properly reconnect upon internal error received.
- Message recovery support for client-side subscriptions. See #39. Thanks to Anton Selyanin.
- Add initial WebSocket reconnection delay (mitigating issues with Starscream connect timeout). Thanks to Anton Selyanin.
- Fix refresh token task retain cycle #38
A couple of new methods added to Client.
Client.getSubscription(channel: String) -> CentrifugeSubscription?
to get Subscription from internal client registryClient.removeSubscription(_ sub: CentrifugeSubscription)
to tell Client that Subscription should be removed from internal registry. Subscription will be automatically unsubscribed before removing.
See more details in pull request #36. In short, subscription removing can be helpful if you work with lots of short-living subscriptions to different channels to prevent unlimited internal Subscription registry growth.
- Update client.proto file. Update sendRPC method - #33, thanks @hitman1711
- Public fields for
CentrifugePublication
,CentrifugeClientInfo
,CentrifugePresenceStats
- reduce access for private functions (#20)
- rewrite code to escape await logic (#23)
- Feature/subscription weak reference (#25)
- Mark
refresh
andprivate sub
completion blocks as escaping - Fix Starscream dependency to compatible version
- fix client deinit (#10)
- fix unlock issue (#11)
- add SPM product (library) and update dependencies (#15)
- refactor library layout
- fix extensions and subscription channel property access levels.
- Travis CI setup
Initial library release.