Files
sdk/pkg/analysis_server/lib/driver.dart
T
paulberry@google.com 6a50f6f490 Make the http portion of the analysis server optional.
If no "--port" option is supplied, the analysis server won't start up
an http server, and it will only communicate with the client over
stdio.

R=brianwilkerson@google.com

Review URL: https://codereview.chromium.org//239333006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@35129 260f80e4-7a28-3924-810f-c04153c831b5
2014-04-16 20:03:25 +00:00

98 lines
2.5 KiB
Dart

// 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.
library driver;
import 'dart:io';
import 'package:analysis_server/http_server.dart';
import 'package:analysis_server/src/socket_server.dart';
import 'package:analysis_server/stdio_server.dart';
import 'package:args/args.dart';
/**
* The [Driver] class represents a single running instance of the analysis
* server application. It is responsible for parsing command line options
* and starting the HTTP and/or stdio servers.
*/
class Driver {
/**
* The name of the application that is used to start a server.
*/
static const BINARY_NAME = 'server';
/**
* The name of the option used to print usage information.
*/
static const String HELP_OPTION = "help";
/**
* The name of the option used to specify the port to which the server will
* connect.
*/
static const String PORT_OPTION = "port";
SocketServer socketServer = new SocketServer();
HttpAnalysisServer httpServer;
StdioAnalysisServer stdioServer;
Driver() {
httpServer = new HttpAnalysisServer(socketServer);
stdioServer = new StdioAnalysisServer(socketServer);
}
/**
* Use the given command-line arguments to start this server.
*/
void start(List<String> args) {
ArgParser parser = new ArgParser();
parser.addFlag(HELP_OPTION, help:
"print this help message without starting a server", defaultsTo: false,
negatable: false);
parser.addOption(PORT_OPTION, help:
"[port] the port on which the server will listen");
ArgResults results = parser.parse(args);
if (results[HELP_OPTION]) {
_printUsage(parser);
return;
}
int port;
bool serve_http = false;
if (results[PORT_OPTION] != null) {
serve_http = true;
try {
port = int.parse(results[PORT_OPTION]);
} on FormatException {
print('Invalid port number: ${results[PORT_OPTION]}');
print('');
_printUsage(parser);
exitCode = 1;
return;
}
}
if (serve_http) {
httpServer.serveHttp(port);
}
stdioServer.serveStdio().then((_) {
if (serve_http) {
httpServer.close();
}
});
}
/**
* Print information about how to use the server.
*/
void _printUsage(ArgParser parser) {
print('Usage: $BINARY_NAME [flags]');
print('');
print('Supported flags are:');
print(parser.getUsage());
}
}