commit | 19d59bf74492763beeed5d14a7f65f0356207cb1 | [log] [tgz] |
---|---|---|
author | Todd Volkert <tvolkert@users.noreply.github.com> | Mon May 20 09:22:16 2019 -0700 |
committer | Jacob MacDonald <jakemac@google.com> | Mon May 20 10:22:16 2019 -0600 |
tree | 7bbe682bb9c6f36f07b5c33085b8ba52311f6657 | |
parent | 372d04fcadf1c356102fb3ba02c2c2e84f519fca [diff] |
Make Stdin act like a Stream<Uint8List> (#39) * Make Stdin act like a Stream<Uint8List> In preparation for https://github.com/dart-lang/sdk/issues/36900 * Bump version, and add changelog entry
Tools for creating a persistent worker loop for bazel.
There are two abstract classes provided by this package, AsyncWorkerLoop
and SyncWorkerLoop
. These each have a performRequest
method which you must implement.
Lets look at a simple example of a SyncWorkerLoop
implementation:
import 'dart:io'; import 'package:bazel_worker/bazel_worker.dart'; void main() { // Blocks until it gets an EOF from stdin. new SyncSimpleWorker().run(); } class SyncSimpleWorker extends SyncWorkerLoop { /// Must synchronously return a [WorkResponse], since this is a /// [SyncWorkerLoop]. WorkResponse performRequest(WorkRequest request) { new File('hello.txt').writeAsStringSync('hello world!'); return new WorkResponse()..exitCode = EXIT_CODE_OK; } }
And now the same thing, implemented as an AsyncWorkerLoop
:
import 'dart:io'; import 'package:bazel_worker/bazel_worker.dart'; void main() { // Doesn't block, runs tasks async as they are received on stdin. new AsyncSimpleWorker().run(); } class AsyncSimpleWorker extends AsyncWorkerLoop { /// Must return a [Future<WorkResponse>], since this is an /// [AsyncWorkerLoop]. Future<WorkResponse> performRequest(WorkRequest request) async { await new File('hello.txt').writeAsString('hello world!'); return new WorkResponse()..exitCode = EXIT_CODE_OK; } }
As you can see, these are nearly identical, it mostly comes down to the constraints on your package and personal preference which one you choose to implement.
A package:bazel_worker/testing.dart
file is also provided, which can greatly assist with writing unit tests for your worker. See the test/worker_loop_test.dart
test included in this package for an example of how the helpers can be used.
Please file feature requests and bugs at the issue tracker.