public static async Task RegisterCapability(this IResponseRouter mediator, RegistrationParams @params)
 {
     try
     {
         await mediator.SendRequest(Client.ClientNames.RegisterCapability, @params);
     }
     catch (Exception e)
     {
         // VsCode today does not implement LSP properly.
         await mediator.SendRequest("client/registerFeature", @params);
     }
 }
示例#2
0
 public static Task CreateProgress(this IResponseRouter mediator, ProgressToken token,
                                   CancellationToken cancellationToken)
 {
     return(mediator.SendRequest(new WorkDoneProgressCreateParams()
     {
         Token = token
     }, cancellationToken));
 }
 private IObservable <TResponse> MakeRequest <TResponse>(IRequest <TResponse> request) =>
 // Has problems with wanting custom exceptions around cancellation.
 // Observable.FromAsync(ct => _router.SendRequest(request, ct))
 Observable.Create <TResponse>(
     async(observer, ct) => {
     try
     {
         observer.OnNext(await _router.SendRequest(request, ct).ConfigureAwait(false));
         observer.OnCompleted();
     }
     catch (OperationCanceledException e)
     {
         observer.OnError(e);
     }
     catch (Exception e)
     {
         observer.OnError(e);
     }
 }
     );
        /// <summary>
        /// Creates a <see cref="IObserver{WorkDoneProgressReport}" /> that will send all of its progress information to the same source.
        /// The other side can cancel this, so the <see cref="CancellationToken" /> should be respected.
        /// </summary>
        public async Task <IWorkDoneObserver> Create(ProgressToken progressToken, WorkDoneProgressBegin begin,
                                                     Func <Exception, WorkDoneProgressEnd> onError = null, Func <WorkDoneProgressEnd> onComplete = null, CancellationToken cancellationToken = default)
        {
            if (!_supported)
            {
                return(NoopWorkDoneObserver.Instance);
            }

            if (_activeObservers.TryGetValue(progressToken, out var item))
            {
                return(item);
            }

            await _router.SendRequest(new WorkDoneProgressCreateParams()
            {
                Token = progressToken
            }, cancellationToken);

            onError ??= error => new WorkDoneProgressEnd()
            {
                Message = error.ToString()
            };

            onComplete ??= () => new WorkDoneProgressEnd();

            var cts      = new CancellationTokenSource();
            var observer = new WorkDoneObserver(
                progressToken,
                _router,
                _serializer,
                begin,
                onError,
                onComplete,
                cts.Token
                );

            _activeObservers.TryAdd(observer.WorkDoneToken, observer);
            _activeObserverTokens.TryAdd(observer.WorkDoneToken, cts);

            return(observer);
        }
 public Task <TResponse> SendRequest <T, TResponse>(string method, T @params, CancellationToken cancellationToken) => _responseRouter.SendRequest <T, TResponse>(method, @params, cancellationToken);
示例#6
0
 public Task <TResponse> SendRequest <T, TResponse>(string method, T @params)
 {
     return(_responseRouter.SendRequest <T, TResponse>(method, @params));
 }
示例#7
0
 public IResponseRouterReturns SendRequest <T>(string method, T @params) => _responseRouter.SendRequest(method, @params);
示例#8
0
 public static Task <MessageActionItem> ShowMessage(this IResponseRouter mediator, ShowMessageRequestParams @params)
 {
     return(mediator.SendRequest <ShowMessageRequestParams, MessageActionItem>(WindowNames.ShowMessageRequest, @params));
 }
 public static Task <ApplyWorkspaceEditResponse> ApplyEdit(this IResponseRouter mediator, ApplyWorkspaceEditParams @params)
 {
     return(mediator.SendRequest <ApplyWorkspaceEditParams, ApplyWorkspaceEditResponse>(WorkspaceNames.ApplyEdit, @params));
 }