Viewing version 0.7.0. Open the latest package page.
centrifuge
0.7.0Dart client to communicate with Centrifuge and Centrifugo from Flutter and VM over dart:io WebSocket
Readme
Example
Examples:
example\flutter_appsimple chat applicationexample\consolesimple console application
Usage
Create client:
import 'package:centrifuge/centrifuge.dart' as centrifuge;
final client = centrifuge.createClient("ws://localhost:8000/connection/websocket?format=protobuf");
Note that ?format=protobuf is required because this library only works with Protobuf protocol. While this client uses binary Protobuf protocol internally nothing stops you from sending JSON-encoded data over it.
Connect to server:
client.connect();
Note that .connect() method is asynchronous. This means that client will be properly connected and authenticated on server at some point in future. To handle connect and disconnect events you can listen to connectStream and disconnectStream:
client.connectStream.listen(onEvent);
client.disconnectStream.listen(onEvent);
client.connect();
Connect and disconnect events can happen many times throughout client lifetime.
Subscribe to channel:
final subscription = client.getSubscription(channel);
subscription.publishStream.listen(onEvent);
subscription.joinStream.listen(onEvent);
subscription.leaveStream.listen(onEvent);
subscription.subscribeSuccessStream.listen(onEvent);
subscription.subscribeErrorStream.listen(onEvent);
subscription.unsubscribeStream.listen(onEvent);
subscription.subscribe();
Publish:
final output = jsonEncode({'input': message});
final data = utf8.encode(output);
await subscription.publish(data);
Feature matrix
- connect to server using JSON protocol format
- connect to server using Protobuf protocol format
- connect with token (JWT)
- connect with custom header
- automatic reconnect in case of errors, network problems etc
- exponential backoff for reconnect
- connect and disconnect events
- handle disconnect reason
- subscribe on channel and handle asynchronous Publications
- handle Join and Leave messages
- handle Unsubscribe notifications
- reconnect on subscribe timeout
- publish method of Subscription
- unsubscribe method of Subscription
- presence method of Subscription
- presence stats method of Subscription
- history method of Subscription
- top-level publish method
- top-level presence method
- top-level presence stats method
- top-level history method
- top-level unsubscribe method
- send asynchronous messages to server
- handle asynchronous messages from server
- send RPC commands
- subscribe to private channels with token (JWT)
- connection JWT refresh
- private channel subscription token (JWT) refresh
- handle connection expired error
- handle subscription expired error
- ping/pong to find broken connection
- message recovery mechanism for client-side subscriptions
- server-side subscriptions
- message recovery mechanism for server-side subscriptions
- history stream pagination
Instructions to update protobuf
- Install
protoccompiler - Install
protoc_pluginhttps://pub.dev/packages/protoc_plugin (dart pub global activate protoc_plugin) - cd
lib/src/protoand runprotoc --dart_out=. -I . client.proto - cd to root and run
dartfmt -w lib/ test/(install dartfmt withdart pub global activate dart_style)
Instructions to release
- Update changelog
- Bump version in
pubspec.yaml, push, create new tag pub publish
Author
German Saprykin, saprykin.h@gmail.com
Changelog
[0.7.0]
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,sinceandreversearguments and returnsHistoryResult - RPC call now requires method name as first argument (you can pass empty string to mimic previous behavior)
- Publish now returns
PublishResult - When working with Centrifugo v3 or Centrifuge >= v0.18.0 it's now possible to avoid using
?format=protobufin connection URL. Client will negotiate Protobuf protocol with a server using WebSocket subprotocol mechanism (in request headers).
[0.6.0]
Null safety migration
- library dependencies updated to null safe versions
- library code updated to support null safety in places where required
See issue #47 and pull request #48 for details.
[0.5.1]
- Skip handling for events from server-side subscriptions resulted in null pointer dereference
[0.5.0]
- Update protobuf dependency to
^1.0.1, thanks @Holofox
[0.4.1]
- Implement
removeSubscriptionmethod, thanks @tiamo
[0.4.0]
- Breaking changes
connectedproperty removed
[0.3.0]
- Breaking changes Changed API to avoid returning futures where they do not make sense – in
connectandsubscribemethods. - Client now uses Websocket Ping/Pong frames to find broken connection
- Support for private channel subscription using
onPrivateSubconfiguration callback function - Fix several null pointer dereferences in edge cases, throw
ClientDisconnectedErrorwhen there is an attempt to send protocol request over non-connected client. - Fix examples where subscribe could happen before stream handlers set
[0.2.0]
- Breaking changes Replaced subscribe method with getSubscription in Client.
- Added reconnection.
- Added history method to Subscription. Thanks vanelizarov.
- Added rpc method.
[0.1.0]
- Added authorization with JWT
- Added subscription to private channel with JWT
[0.0.1]
- Initial release
Installing
export PUB_HOSTED_URL=https://pub.mirror.p-hatan.ir
flutter pub add 'centrifuge:0.7.0'pubspec.yaml
name: centrifuge
version: 0.7.0
description: >
Dart client to communicate with Centrifuge and Centrifugo from Flutter and VM over dart:io WebSocket
homepage: http://github.com/centrifugal/centrifuge-dart
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
meta: ^1.3.0
protobuf: ^2.0.0
fixnum: ^1.0.0
dev_dependencies:
test: ^1.17.4
mockito: ^5.0.7
build_runner: ^2.0.3
Version history
| Version | Published | Archive | SHA-256 |
|---|---|---|---|
| 0.0.1 | Cached · Upstream SHA-256 matched | Download | db3faacd…bd6395 |
| 0.1.0 | Cached · Upstream SHA-256 matched | Download | 09f7e4de…6b0b62 |
| 0.2.0 | Cached · Upstream SHA-256 matched | Download | 23bb4439…ea7ae6 |
| 0.3.0 | Cached · Upstream SHA-256 matched | Download | 3b377680…8aab61 |
| 0.4.0 | Cached · Upstream SHA-256 matched | Download | 08e6f397…213fbc |
| 0.4.1 | Cached · Upstream SHA-256 matched | Download | 6bb61dec…98094b |
| 0.5.0 | Cached · Upstream SHA-256 matched | Download | fd063805…d18ae1 |
| 0.5.1 | Cached · Upstream SHA-256 matched | Download | 60d5f869…941458 |
| 0.6.0 | Cached · Upstream SHA-256 matched | Download | d219ec9a…037c10 |
| 0.7.0 | Cached · Upstream SHA-256 matched | Download | 6548eff6…235e80 |
| 0.7.1 | Cached · Upstream SHA-256 matched | Download | 56407e60…13ad2c |
| 0.8.0 | Cached · Upstream SHA-256 matched | Download | 5ac2b57e…b7620a |
| 0.9.0 | Cached · Upstream SHA-256 matched | Download | 1f281a39…016252 |
| 0.9.1 | Cached · Upstream SHA-256 matched | Download | 0b9abe02…7ab142 |
| 0.9.2 | Cached · Upstream SHA-256 matched | Download | c261d991…360df3 |
| 0.9.3 | Cached · Upstream SHA-256 matched | Download | 4cd31b8b…bd7d34 |
| 0.9.4 | Cached · Upstream SHA-256 matched | Download | fda87da9…272ec3 |
| 0.10.0 | Cached · Upstream SHA-256 matched | Download | a278ecc0…d447b3 |
| 0.11.0 | Cached · Upstream SHA-256 matched | Download | 26bc8e36…65c5ec |
| 0.12.0 | Cached · Upstream SHA-256 matched | Download | 8a836da8…ea9aef |
| 0.13.0 | Cached · Upstream SHA-256 matched | Download | 8cea9670…6c71c8 |
| 0.14.0 | Cached · Upstream SHA-256 matched | Download | c35b75c7…4e4d47 |
| 0.14.1 | Cached · Upstream SHA-256 matched | Download | 15b9aabc…7e2516 |
| 0.15.0 | Cached · Upstream SHA-256 matched | Download | bc4e20bc…a8eb01 |
| 0.15.1 | Cached · Upstream SHA-256 matched | Download | bcd1e205…ccdf09 |
| 0.16.0 | Cached · Upstream SHA-256 matched | Download | b8b3d3c6…522a6d |
| 0.17.0 | Cached · Upstream SHA-256 matched | Download | 96050368…f97c73 |
| 0.18.0 | Cached · Upstream SHA-256 matched | Download | fa943928…f530ba |
| 0.19.0 | Cached · Upstream SHA-256 matched | Download | 672d21fa…77253d |
| 0.19.1 | Cached · Upstream SHA-256 matched | Download | 27808466…6446ea |
| 0.20.0 | Cached · Upstream SHA-256 matched | Download | fae4f687…b2bc6a |
| 0.20.1 | Cached · Upstream SHA-256 matched | Download | 5f172511…1e177d |
| 0.21.0 | Cached · Upstream SHA-256 matched | Download | 7449dc56…2b7969 |
Dependencies
fixnum "^1.0.0"
meta "^1.3.0"
protobuf "^2.0.0"