A shelf extension for EventSource or Server-Sent Events (SSE) that works together with the eventsource package.
The usage is really easy:
import "package:shelf/shelf_io.dart" as io;
import "package:eventsource/publisher.dart";
import "package:shelf_eventsource/shelf_eventsource.dart";
EventSourcePublisher publisher = new EventSourcePublisher(cacheCapacity: 100);
var handler = eventSourceHandler(publisher);
io.serve(handler, "localhost", 8080);
For a more extensive example with routing, see the example/
directory.
This project is available under the MIT license, as can be found in the LICENSE file.
example/shelf_eventsource_example.dart
import "dart:async";
import "package:shelf/shelf_io.dart" as io;
import "package:shelf_route/shelf_route.dart" as routing;
import "package:eventsource/publisher.dart";
import "package:shelf_eventsource/shelf_eventsource.dart";
main() {
// create the publisher object that will manage event publishing to
// subscribers
EventSourcePublisher publisher = new EventSourcePublisher(cacheCapacity: 100);
// generate some dummy events
generateEvents(publisher);
// create a shelf handler
var handler = eventSourceHandler(publisher);
// or create a handler for a specific channel
var channelHandler =
eventSourceHandler(publisher, channel: "mychannel", gzip: true);
// create a router to serve the different event sources
var router = routing.router();
router.get("/events", handler);
router.get("/mychannel", channelHandler);
// serve localhost with our router
io.serve(router.handler, "localhost", 8080);
}
generateEvents(publisher) {
int id = 0;
new Timer.periodic(const Duration(seconds: 1), (timer) {
// publish an event on the default channel
publisher
.add(new Event.message(id: "$id", data: "Always the same message?"));
// publish event in a channel
publisher.add(
new Event.message(id: "$id", data: "Mychannel Message"), ["mychannel"]);
if (id == 25) {
timer.cancel();
// broadcast last message to both channels and close them
publisher.add(
new Event(event: "goodbye", data: "Goodbye all!"), ["", "mychannel"]);
publisher.closeAll();
}
});
}
Add this to your package's pubspec.yaml file:
dependencies:
shelf_eventsource: ^0.1.0+1
You can install packages from the command line:
with pub:
$ pub get
Alternatively, your editor might support pub get
.
Check the docs for your editor to learn more.
Now in your Dart code, you can use:
import 'package:shelf_eventsource/shelf_eventsource.dart';
Version | Uploaded | Documentation | Archive |
---|---|---|---|
0.1.0+1 | Nov 28, 2016 |
|
|
0.1.0 | Nov 27, 2016 |
|
|
0.2.0-rc1 | Oct 9, 2018 |
|
|
Popularity:
Describes how popular the package is relative to other packages.
[more]
|
7
|
Health:
Code health derived from static analysis.
[more]
|
--
|
Maintenance:
Reflects how tidy and up-to-date the package is.
[more]
|
--
|
Overall:
Weighted score of the above.
[more]
|
3
|
The package version is not analyzed, because it does not support Dart 2. Until this is resolved, the package will receive a health and maintenance score of 0.
Support Dart 2 in pubspec.yaml
.
The SDK constraint in pubspec.yaml
doesn't allow the Dart 2.0.0 release. For information about upgrading it to be Dart 2 compatible, please see https://www.dartlang.org/dart-2#migration.
Make sure dartdoc
successfully runs on your package's source files. (-10 points)
Dependencies were not resolved.
Package | Constraint | Resolved | Available |
---|---|---|---|
Direct dependencies | |||
Dart SDK | >=1.0.0 <2.0.0 |