move worker connection impls into worker_connection.dart, updated comments to be more relevant
diff --git a/lib/src/worker/async_worker_loop.dart b/lib/src/worker/async_worker_loop.dart
index fa0007b..29f6ff8 100644
--- a/lib/src/worker/async_worker_loop.dart
+++ b/lib/src/worker/async_worker_loop.dart
@@ -3,24 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
-import 'dart:io';
import '../constants.dart';
-import '../async_message_grouper.dart';
-import '../utils.dart';
import '../worker_protocol.pb.dart';
import 'worker_connection.dart';
import 'worker_loop.dart';
-/// Connection between a worker and input / output.
-abstract class AsyncWorkerConnection implements WorkerConnection {
- /// Read a new [WorkRequest]. Returns [null] when there are no more requests.
- Future<WorkRequest> readRequest();
-
- /// Write the given [response] as bytes to the output.
- void writeResponse(WorkResponse response);
-}
-
/// Persistent Bazel worker loop.
///
/// Extend this class and implement the `performRequest` method.
@@ -63,28 +51,3 @@
}
}
}
-
-/// Default implementation of [AsyncWorkerConnection] that works with [Stdin]
-/// and [Stdout].
-class StdAsyncWorkerConnection implements AsyncWorkerConnection {
- final AsyncMessageGrouper _messageGrouper;
- final StreamSink<List<int>> _outputStream;
-
- StdAsyncWorkerConnection(
- {Stream<List<int>> inputStream, StreamSink<List<int>> outputStream})
- : _messageGrouper = new AsyncMessageGrouper(inputStream ?? stdin),
- _outputStream = outputStream ?? stdout;
-
- @override
- Future<WorkRequest> readRequest() async {
- var buffer = await _messageGrouper.next;
- if (buffer == null) return null;
-
- return new WorkRequest.fromBuffer(buffer);
- }
-
- @override
- void writeResponse(WorkResponse response) {
- _outputStream.add(protoToDelimitedBuffer(response));
- }
-}
diff --git a/lib/src/worker/sync_worker_loop.dart b/lib/src/worker/sync_worker_loop.dart
index f0e94c6..e1b9aaf 100644
--- a/lib/src/worker/sync_worker_loop.dart
+++ b/lib/src/worker/sync_worker_loop.dart
@@ -2,24 +2,12 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
-import 'dart:io';
import '../constants.dart';
-import '../sync_message_grouper.dart';
-import '../utils.dart';
import '../worker_protocol.pb.dart';
import 'worker_connection.dart';
import 'worker_loop.dart';
-/// Connection between a worker and input / output.
-abstract class SyncWorkerConnection implements WorkerConnection {
- /// Read a new [WorkRequest]. Returns [null] when there are no more requests.
- WorkRequest readRequest();
-
- /// Write the given [response] as bytes to the output.
- void writeResponse(WorkResponse response);
-}
-
/// Persistent Bazel worker loop.
///
/// Extend this class and implement the `performRequest` method.
@@ -60,27 +48,3 @@
}
}
}
-
-/// Default implementation of [SyncWorkerConnection] that works with [Stdin] and
-/// [Stdout].
-class StdSyncWorkerConnection implements SyncWorkerConnection {
- final SyncMessageGrouper _messageGrouper;
- final Stdout _stdoutStream;
-
- StdSyncWorkerConnection({Stdin stdinStream, Stdout stdoutStream})
- : _messageGrouper = new SyncMessageGrouper(stdinStream ?? stdin),
- _stdoutStream = stdoutStream ?? stdout;
-
- @override
- WorkRequest readRequest() {
- var buffer = _messageGrouper.next;
- if (buffer == null) return null;
-
- return new WorkRequest.fromBuffer(buffer);
- }
-
- @override
- void writeResponse(WorkResponse response) {
- _stdoutStream.add(protoToDelimitedBuffer(response));
- }
-}
diff --git a/lib/src/worker/worker_connection.dart b/lib/src/worker/worker_connection.dart
index cbe6e3b..d93e033 100644
--- a/lib/src/worker/worker_connection.dart
+++ b/lib/src/worker/worker_connection.dart
@@ -3,17 +3,79 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
+import 'dart:io';
+import '../async_message_grouper.dart';
+import '../sync_message_grouper.dart';
+import '../utils.dart';
import '../worker_protocol.pb.dart';
-/// Interface for a [WorkerConnection].
-///
-/// Use [SyncWorkerConnection] or [AsyncWorkerConnection] implementations.
+/// A connection from a worker to a driver (diver could be bazel, a dart program
+/// using `BazelWorkerDriver`, or any other process that speaks the protocol).
abstract class WorkerConnection {
- /// Read a [WorkRequest]. Returns either [Future<WorkRequest>] or
- /// [WorkRequest].
+ /// Reads a [WorkRequest] or returns [null] if there are none left.
+ ///
+ /// See [AsyncWorkerConnection] and [SyncWorkerConnection] for more narrow
+ /// interfaces.
FutureOr<WorkRequest> readRequest();
- /// Writes a [WorkResponse].
void writeResponse(WorkResponse response);
}
+
+abstract class AsyncWorkerConnection implements WorkerConnection {
+ @override
+ Future<WorkRequest> readRequest();
+}
+
+abstract class SyncWorkerConnection implements WorkerConnection {
+ WorkRequest readRequest();
+}
+
+/// Default implementation of [AsyncWorkerConnection] that works with [Stdin]
+/// and [Stdout].
+class StdAsyncWorkerConnection implements AsyncWorkerConnection {
+ final AsyncMessageGrouper _messageGrouper;
+ final StreamSink<List<int>> _outputStream;
+
+ StdAsyncWorkerConnection(
+ {Stream<List<int>> inputStream, StreamSink<List<int>> outputStream})
+ : _messageGrouper = new AsyncMessageGrouper(inputStream ?? stdin),
+ _outputStream = outputStream ?? stdout;
+
+ @override
+ Future<WorkRequest> readRequest() async {
+ var buffer = await _messageGrouper.next;
+ if (buffer == null) return null;
+
+ return new WorkRequest.fromBuffer(buffer);
+ }
+
+ @override
+ void writeResponse(WorkResponse response) {
+ _outputStream.add(protoToDelimitedBuffer(response));
+ }
+}
+
+/// Default implementation of [SyncWorkerConnection] that works with [Stdin] and
+/// [Stdout].
+class StdSyncWorkerConnection implements SyncWorkerConnection {
+ final SyncMessageGrouper _messageGrouper;
+ final Stdout _stdoutStream;
+
+ StdSyncWorkerConnection({Stdin stdinStream, Stdout stdoutStream})
+ : _messageGrouper = new SyncMessageGrouper(stdinStream ?? stdin),
+ _stdoutStream = stdoutStream ?? stdout;
+
+ @override
+ WorkRequest readRequest() {
+ var buffer = _messageGrouper.next;
+ if (buffer == null) return null;
+
+ return new WorkRequest.fromBuffer(buffer);
+ }
+
+ @override
+ void writeResponse(WorkResponse response) {
+ _stdoutStream.add(protoToDelimitedBuffer(response));
+ }
+}