Пример #1
0
 public static TResult ObserveWorkDone <T, TResult>(
     this IWorkspaceLanguageClient proxy, T @params, Func <IWorkspaceLanguageClient, T, TResult> func, IWorkDoneProgressObserver observer
     )
     where T : IWorkDoneProgressParams
 {
     DoObserveWorkDone(proxy, @params, observer);
     return(func(proxy, @params));
 }
Пример #2
0
        private static void DoObserveWorkDone(ILanguageProtocolProxy proxy, IWorkDoneProgressParams @params, IWorkDoneProgressObserver observer)
        {
            var token      = @params.WorkDoneToken ??= new ProgressToken(Guid.NewGuid().ToString());
            var observable = proxy.GetRequiredService <IClientWorkDoneManager>().Monitor(token);

            observable.Subscribe(
                v => {
                switch (v)
                {
                case WorkDoneProgressBegin begin:
                    observer.OnBegin(begin);
                    break;

                case WorkDoneProgressReport report:
                    observer.OnReport(report);
                    break;

                case WorkDoneProgressEnd end:
                    observer.OnEnd(end);
                    break;
                }
            },
                observer.OnError,
                observer.OnCompleted
                );
        }