| // Copyright (c) 2018, 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:analysis_server/lsp_protocol/protocol_generated.dart'; |
| import 'package:analysis_server/src/lsp/lsp_analysis_server.dart'; |
| |
| /** |
| * The abstract class [LspServerCommunicationChannel] defines the behavior of |
| * objects that allow an [LspAnalysisServer] to receive [RequestMessage]s and |
| * [NotificationMessage]s and to return both [ResponseMessage]s and |
| * [NotificationMessage]s. |
| */ |
| abstract class LspServerCommunicationChannel { |
| Future get closed; |
| |
| /** |
| * Close the communication channel. |
| */ |
| void close(); |
| |
| /** |
| * Listen to the channel for messages. If a message is received, invoke the |
| * [onMessage] 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 onMessage(Message message), |
| {Function onError, void onDone()}); |
| |
| /** |
| * Send the given [notification] to the client. |
| */ |
| void sendNotification(NotificationMessage notification); |
| |
| /** |
| * Send the given [request] to the client. |
| */ |
| void sendRequest(RequestMessage request); |
| |
| /** |
| * Send the given [response] to the client. |
| */ |
| void sendResponse(ResponseMessage response); |
| } |