Files
sdk/pkg/analysis_server/lib/src/socket_server.dart
T
scheglov@google.com 08a248283e Issue 20240. Use a FileManager that manages its own temporary directory.
So, we can have more than one index and server running.
And we know when it is time to delete or recreate this temporary directory.

R=paulberry@google.com
BUG= https://code.google.com/p/dart/issues/detail?id=20240

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

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@38652 260f80e4-7a28-3924-810f-c04153c831b5
2014-07-28 22:13:58 +00:00

85 lines
2.9 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 socket.server;
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/channel.dart';
import 'package:analysis_server/src/domain_analysis.dart';
import 'package:analysis_server/src/domain_completion.dart';
import 'package:analysis_server/src/edit/edit_domain.dart';
import 'package:analysis_server/src/search/search_domain.dart';
import 'package:analysis_server/src/domain_server.dart';
import 'package:analysis_server/src/package_map_provider.dart';
import 'package:analysis_server/src/protocol.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/generated/sdk_io.dart';
import 'package:analysis_services/index/index.dart';
import 'package:analysis_services/index/local_file_index.dart';
/**
* Creates and runs an [Index].
*/
Index _createIndex() {
Index index = createLocalFileIndex();
index.run();
return index;
}
/**
* Instances of the class [SocketServer] implement the common parts of
* http-based and stdio-based analysis servers. The primary responsibility of
* the SocketServer is to manage the lifetime of the AnalysisServer and to
* encode and decode the JSON messages exchanged with the client.
*/
class SocketServer {
/**
* The analysis server that was created when a client established a
* connection, or `null` if no such connection has yet been established.
*/
AnalysisServer analysisServer;
final DirectoryBasedDartSdk defaultSdk;
SocketServer(this.defaultSdk);
/**
* Create an analysis server which will communicate with the client using the
* given serverChannel.
*/
void createAnalysisServer(ServerCommunicationChannel serverChannel) {
if (analysisServer != null) {
RequestError error = new RequestError.serverAlreadyStarted();
serverChannel.sendResponse(new Response('', error));
serverChannel.listen((Request request) {
serverChannel.sendResponse(new Response(request.id, error));
});
return;
}
PhysicalResourceProvider resourceProvider = PhysicalResourceProvider.INSTANCE;
analysisServer = new AnalysisServer(
serverChannel,
resourceProvider,
new PubPackageMapProvider(resourceProvider, defaultSdk),
_createIndex(),
defaultSdk,
rethrowExceptions: false);
_initializeHandlers(analysisServer);
}
/**
* Initialize the handlers to be used by the given [server].
*/
void _initializeHandlers(AnalysisServer server) {
server.handlers = [
new ServerDomainHandler(server),
new AnalysisDomainHandler(server),
new EditDomainHandler(server),
new SearchDomainHandler(server),
new CompletionDomainHandler(server),
];
}
}