public CancellationToken Start(IServiceContainer services, JsonRpc rpc) { _server = new Server(services); _services = services; _rpc = rpc; _jsonSerializer = services.GetService <JsonSerializer>(); _idleTimeTracker = services.GetService <IIdleTimeTracker>(); _logger = services.GetService <ILogger>(); _telemetry = services.GetService <ITelemetryService>(); var rpcTraceListener = new TelemetryRpcTraceListener(_telemetry); _rpc.TraceSource.Listeners.Add(rpcTraceListener); _diagnosticsPublisher = new DiagnosticsPublisher(_server, services); _server.OnApplyWorkspaceEdit += OnApplyWorkspaceEdit; _server.OnRegisterCapability += OnRegisterCapability; _server.OnUnregisterCapability += OnUnregisterCapability; _server.AnalysisQueue.UnhandledException += OnAnalysisQueueUnhandledException; _disposables .Add(() => _server.OnApplyWorkspaceEdit -= OnApplyWorkspaceEdit) .Add(() => _server.OnRegisterCapability -= OnRegisterCapability) .Add(() => _server.OnUnregisterCapability -= OnUnregisterCapability) .Add(() => _server.AnalysisQueue.UnhandledException -= OnAnalysisQueueUnhandledException) .Add(() => _shutdownCts.Cancel()) .Add(_prioritizer) .Add(() => _pathsWatcher?.Dispose()) .Add(() => _rpc.TraceSource.Listeners.Remove(rpcTraceListener)) .Add(_diagnosticsPublisher); return(_sessionTokenSource.Token); }
public CancellationToken Start(IServiceManager services, JsonRpc rpc) { _server = new Server(services); _services = services; _rpc = rpc; _jsonSerializer = services.GetService <JsonSerializer>(); _idleTimeTracker = services.GetService <IIdleTimeTracker>(); _logger = services.GetService <ILogger>(); _telemetry = services.GetService <ITelemetryService>(); _requestTimer = new RequestTimer(_telemetry); var rpcTraceListener = new TelemetryRpcTraceListener(_telemetry); _rpc.TraceSource.Listeners.Add(rpcTraceListener); _disposables .Add(() => _shutdownCts.Cancel()) .Add(_prioritizer) .Add(() => _pathsWatcher?.Dispose()) .Add(() => _rpc.TraceSource.Listeners.Remove(rpcTraceListener)); services.AddService(_optionsProvider); return(_sessionTokenSource.Token); }