// 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:isolate';

import 'package:analyzer_plugin/plugin/plugin.dart';
import 'package:analyzer_plugin/src/channel/isolate_channel.dart';
import 'package:analyzer_plugin/starter.dart';

/**
 * The [Driver] class represents a single running instance of an analysis
 * server plugin. It is responsible for handling the communications with the
 * server and forwarding requests on to the plugin.
 */
class Driver implements ServerPluginStarter {
  /**
   * The plugin that will be started.
   */
  final ServerPlugin plugin;

  /**
   * Initialize a newly created driver that can be used to start the given
   * plugin.
   */
  Driver(this.plugin);

  @override
  void start(SendPort sendPort) {
    PluginIsolateChannel channel = new PluginIsolateChannel(sendPort);
    plugin.start(channel);
  }
}
