Index: pkg/analysis_server/lib/src/analysis_manager.dart |
diff --git a/pkg/analysis_server/lib/src/analysis_manager.dart b/pkg/analysis_server/lib/src/analysis_manager.dart |
deleted file mode 100644 |
index 6ad09d07814226f17cd1f45ad753c5de26d1fc85..0000000000000000000000000000000000000000 |
--- a/pkg/analysis_server/lib/src/analysis_manager.dart |
+++ /dev/null |
@@ -1,139 +0,0 @@ |
-// Copyright (c) 2014, 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:convert'; |
-import 'dart:io'; |
- |
-import 'package:analysis_server/protocol/protocol.dart'; |
-import 'package:analysis_server/protocol/protocol_generated.dart'; |
-import 'package:analysis_server/src/channel/channel.dart'; |
-import 'package:analysis_server/src/channel/web_socket_channel.dart'; |
- |
-/** |
- * [AnalysisManager] is used to launch and manage an analysis server |
- * running in a separate process using either the [start] or [connect] methods. |
- */ |
-class AnalysisManager { |
- // TODO dynamically allocate port and/or allow client to specify port |
- static const int PORT = 3333; |
- |
- /** |
- * The analysis server process being managed |
- * or `null` if managing an analysis server that was already running. |
- */ |
- Process process; |
- |
- /** |
- * The channel used to communicate with the analysis server. |
- */ |
- ClientCommunicationChannel channel; |
- |
- /** |
- * Stop the analysis server. |
- * |
- * Returns `true` if the signal is successfully sent and process terminates. |
- * Otherwise there was no attached process or the signal could not be sent, |
- * usually meaning that the process is already dead. |
- */ |
- Future<bool> stop() async { |
- if (process == null) { |
- await channel.close(); |
- return false; |
- } |
- int result = await channel |
- .sendRequest(new ServerShutdownParams().toRequest('0')) |
- .timeout(new Duration(seconds: 2), onTimeout: () { |
- print('Expected shutdown response'); |
- }).then((Response response) { |
- return channel.close().then((_) => process.exitCode); |
- }).timeout(new Duration(seconds: 2), onTimeout: () { |
- print('Expected server to shutdown'); |
- process.kill(); |
- }); |
- if (result != null && result != 0) { |
- exitCode = result; |
- } |
- return true; |
- } |
- |
- /** |
- * Launch an analysis server and open a connection to that server. |
- */ |
- Future<AnalysisManager> _launchServer(String pathToServer) async { |
- try { |
- // TODO dynamically allocate port and/or allow client to specify port |
- List<String> serverArgs = [pathToServer, '--port', PORT.toString()]; |
- Process process = await Process.start(Platform.executable, serverArgs); |
- return _listenForPort(process); |
- } catch (error) { |
- exitCode = 1; |
- throw 'Failed to launch analysis server: $error'; |
- } |
- } |
- |
- /** |
- * Listen for a port from the given analysis server process. |
- */ |
- Future<AnalysisManager> _listenForPort(Process process) async { |
- this.process = process; |
- |
- // Echo stdout and stderr |
- Stream out = process.stdout.transform(UTF8.decoder).asBroadcastStream(); |
- out.listen((line) => print(line)); |
- process.stderr.pipe(stderr); |
- |
- // Listen for port from server |
- const String pattern = 'Listening on port '; |
- try { |
- String line = await out |
- .firstWhere((String line) => line.startsWith(pattern)) |
- .timeout(new Duration(seconds: 10)); |
- String port = line.substring(pattern.length).trim(); |
- String url = 'ws://${InternetAddress.LOOPBACK_IP_V4.address}:$port/'; |
- return _openConnection(url); |
- } catch (error) { |
- exitCode = 1; |
- process.kill(); |
- throw 'Expected port from analysis server'; |
- } |
- } |
- |
- /** |
- * Open a connection to the analysis server using the given URL. |
- */ |
- Future<AnalysisManager> _openConnection(String serverUrl) async { |
- Function onError = (error) { |
- exitCode = 1; |
- if (process != null) { |
- process.kill(); |
- } |
- throw 'Failed to connect to analysis server at $serverUrl\n $error'; |
- }; |
- try { |
- WebSocket socket = await WebSocket.connect(serverUrl).catchError(onError); |
- this.channel = new WebSocketClientChannel(socket); |
- return this; |
- } catch (error) { |
- onError(error); |
- } |
- return null; |
- } |
- |
- /** |
- * Open a connection to a running analysis server |
- * and return a future with a manager for that analysis server. |
- */ |
- static Future<AnalysisManager> connect(String serverUrl) { |
- return new AnalysisManager()._openConnection(serverUrl); |
- } |
- |
- /** |
- * Launch analysis server in a separate process |
- * and return a future with a manager for that analysis server. |
- */ |
- static Future<AnalysisManager> start(String serverPath) { |
- return new AnalysisManager()._launchServer(serverPath); |
- } |
-} |