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));
+  }
+}