public async Task Should_Support_Creating_Work_Done_From_Sever_To_Client() { var token = new ProgressToken(Guid.NewGuid().ToString()); var workDoneObservable = Client.WorkDoneManager.Monitor(token); var observable = workDoneObservable.Replay(); using var _ = observable.Connect(); using var workDoneObserver = await Server.WorkDoneManager.Create( token, new WorkDoneProgressBegin { Cancellable = true, Message = "Begin", Percentage = 0, Title = "Work is pending" }, onComplete : () => new WorkDoneProgressEnd { Message = "End" } ); workDoneObserver.OnNext( new WorkDoneProgressReport { Percentage = 10, Message = "Report 1" } ); workDoneObserver.OnNext( new WorkDoneProgressReport { Percentage = 20, Message = "Report 2" } ); workDoneObserver.OnNext( new WorkDoneProgressReport { Percentage = 30, Message = "Report 3" } ); workDoneObserver.OnNext( new WorkDoneProgressReport { Percentage = 40, Message = "Report 4" } ); workDoneObserver.OnCompleted(); var results = await observable.Select( z => z switch { WorkDoneProgressBegin begin => begin.Message, WorkDoneProgressReport begin => begin.Message, WorkDoneProgressEnd begin => begin.Message, _ => throw new NotSupportedException() }
public async Task Should_Support_Creating_Work_Done_From_Sever_To_Client() { var(client, server) = await Initialize(ConfigureClient, ConfigureServer); var token = new ProgressToken(Guid.NewGuid().ToString()); var data = new List <WorkDoneProgress>(); using var workDoneObservable = client.WorkDoneManager.Monitor(token); workDoneObservable.Subscribe(x => data.Add(x)); using var workDoneObserver = await server.WorkDoneManager.Create(token, new WorkDoneProgressBegin () { Cancellable = true, Message = "Begin", Percentage = 0, Title = "Work is pending" }, onComplete : () => new WorkDoneProgressEnd() { Message = "End" }); workDoneObserver.OnNext(new WorkDoneProgressReport() { Percentage = 10, Message = "Report 1" }); workDoneObserver.OnNext(new WorkDoneProgressReport() { Percentage = 20, Message = "Report 2" }); workDoneObserver.OnNext(new WorkDoneProgressReport() { Percentage = 30, Message = "Report 3" }); workDoneObserver.OnNext(new WorkDoneProgressReport() { Percentage = 40, Message = "Report 4" }); workDoneObserver.OnCompleted(); await SettleNext(); var results = data.Select(z => z switch { WorkDoneProgressBegin begin => begin.Message, WorkDoneProgressReport begin => begin.Message, WorkDoneProgressEnd begin => begin.Message, });