// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// 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:isolate';

import 'package:bazel_worker/bazel_worker.dart';
import 'package:bazel_worker/driver.dart';

/// Example worker that just forwards requests to an isolate.
class ForwardsToIsolateAsyncWorker extends AsyncWorkerLoop {
  final IsolateDriverConnection _isolateDriverConnection;

  static Future<ForwardsToIsolateAsyncWorker> create(
      ReceivePort receivePort) async {
    return new ForwardsToIsolateAsyncWorker(
        await IsolateDriverConnection.create(receivePort));
  }

  ForwardsToIsolateAsyncWorker(this._isolateDriverConnection);

  Future<WorkResponse> performRequest(WorkRequest request) {
    _isolateDriverConnection.writeRequest(request);
    return _isolateDriverConnection.readResponse();
  }
}
