Example #1
0
        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,
            });