| // 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 'dart:async'; |
| |
| import 'package:analysis_server/lsp_protocol/protocol.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. |
| StreamSubscription<void> listen(void Function(Message message) onMessage, |
| {Function onError, void Function() 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); |
| } |