Пример #1
0
 public void OnProcessOutput(RpcProcessOutputEventArgs e)
 {
     if (disposed)
     {
         return;
     }
     outputProcessor.Process(e.Data);
 }
        private void RaiseProcessOnOutput(RpcProcessOutputEventArgs args)
        {
            if (!wrappers.TryGetValue(args.Process.Id, out var list) ||
                !schedulers.TryGetValue(args.Process.Id, out var scheduler))
            {
                throw new InvalidOperationException(
                          $"OnOutput for process {args.Process.Id} was called but there's no record of it in the process list.");
            }

            foreach (var wrapper in list)
            {
                scheduler.Schedule(s => wrapper.OnProcessOutput((RpcProcessOutputEventArgs)s), args, cts.Token);
            }
        }
        private void RaiseOnProcessOutput(string id, string line)
        {
            if (cts.IsCancellationRequested)
            {
                return;
            }

            if (processes.TryGetValue(id, out var context) && context.Client != null)
            {
                taskManager
                .WithAsync(async ctx => {
                    var data = new NotificationData(ctx.Client.GetRemoteTarget <IProcessNotifications>(),
                                                    RpcProcessOutputEventArgs.Get(ctx.Process, line));
                    await data.notifications.ProcessOnOutput(data.OutputArgs);
                    return(0);
                }, context, TaskAffinity.Custom)
                .Start(context.Notifications);
            }
        }
 public NotificationData(IProcessNotifications notifications, RpcProcessOutputEventArgs args)
 {
     this.notifications = notifications;
     this.args          = args;
 }
 public Task ProcessOnOutput(RpcProcessOutputEventArgs args)
 {
     manager.RaiseProcessOnOutput(args);
     return(Task.CompletedTask);
 }