// 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 'package:analyzer_plugin/protocol/protocol.dart'; /// A communication channel that allows a [ServerPlugin] to receive [Request]s /// from, and to return both [Response]s and [Notification]s to, an analysis /// server. /// /// Clients may not extend, implement or mix-in this class. abstract class PluginCommunicationChannel { /// Close the communication channel. void close(); /// Listen to the channel for requests. If a request is received, invoke the /// [onRequest] function. If an error is encountered while trying to read from /// the socket, invoke the [onError] function. If the socket is closed by the /// client, invoke the [onDone] function. Only one listener is allowed per /// channel. void listen(void Function(Request request) onRequest, {Function? onError, void Function()? onDone}); /// Send the given [notification] to the server. void sendNotification(Notification notification); /// Send the given [response] to the server. void sendResponse(Response response); } /// A communication channel that allows an analysis server to send [Request]s /// to, and to receive both [Response]s and [Notification]s from, a plugin. /// /// Clients may not extend, implement or mix-in this class. abstract class ServerCommunicationChannel { /// Close the communication channel. void close(); /// Cause the plugin to terminate as soon as possible. This should only be used /// when the plugin has failed to terminate after sending it a 'plugin.shutdown' /// request. void kill(); /// Listen to the channel for responses and notifications. If a response is /// received, invoke the [onResponse] function. If a notification is received, /// invoke the [onNotification] function. If an error is encountered while /// trying to read from the socket, invoke the [onError] function. If the /// socket is closed by the plugin, invoke the [onDone] function. Only one /// listener is allowed per channel. void listen(void Function(Response response) onResponse, void Function(Notification notification) onNotification, {void Function(dynamic error)? onError, void Function()? onDone}); /// Send the given [request] to the plugin. void sendRequest(Request request); }