Ejemplo n.º 1
0
 public override Task KillAsync(ChromiumProcess p)
 {
     Exited.EnterFrom(p, this);
     return(Task.FromResult(false));
 }
 public override Task KillAsync(ChromiumProcess p) => Task.CompletedTask;
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout) => throw new ObjectDisposedException(p.ToString());
 public override Task KillAsync(ChromiumProcess p) => Killing.EnterFromAsync(p, this);
 public override Task KillAsync(ChromiumProcess p) => WaitForExitAsync(p);
                private async Task StartCoreAsync(ChromiumProcess p)
                {
                    var output = new StringBuilder();

                    void OnProcessDataReceivedWhileStarting(object sender, DataReceivedEventArgs e)
                    {
                        if (e.Data != null)
                        {
                            output.AppendLine(e.Data);
                            var match = Regex.Match(e.Data, "^DevTools listening on (ws:\\/\\/.*)");
                            if (match.Success)
                            {
                                p._startCompletionSource.TrySetResult(match.Groups[1].Value);
                            }
                        }
                    }

                    void OnProcessExitedWhileStarting(object sender, EventArgs e)
                    => p._startCompletionSource.TrySetException(new ChromiumProcessException($"Failed to launch Chromium! {output}"));
                    void OnProcessExited(object sender, EventArgs e) => Exited.EnterFrom(p, p._currentState);

                    p.Process.ErrorDataReceived += OnProcessDataReceivedWhileStarting;
                    p.Process.Exited            += OnProcessExitedWhileStarting;
                    p.Process.Exited            += OnProcessExited;
                    CancellationTokenSource cts = null;

                    try
                    {
                        p.Process.Start();
                        await Started.EnterFromAsync(p, this).ConfigureAwait(false);

                        p.Process.BeginErrorReadLine();

                        var timeout = p._options.Timeout;
                        if (timeout > 0)
                        {
                            cts = new CancellationTokenSource(timeout);
                            cts.Token.Register(() => p._startCompletionSource.TrySetException(
                                                   new ChromiumProcessException($"Timed out after {timeout} ms while trying to connect to Chromium!")));
                        }

                        try
                        {
                            await p._startCompletionSource.Task.ConfigureAwait(false);

                            await Started.EnterFromAsync(p, this).ConfigureAwait(false);
                        }
                        catch
                        {
                            await Killing.EnterFromAsync(p, this).ConfigureAwait(false);

                            throw;
                        }
                    }
                    finally
                    {
                        cts?.Dispose();
                        p.Process.Exited            -= OnProcessExitedWhileStarting;
                        p.Process.ErrorDataReceived -= OnProcessDataReceivedWhileStarting;
                    }
                }
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout) => Exiting.EnterFromAsync(p, this, timeout);
 /// <summary>
 /// Handles process start request.
 /// </summary>
 /// <param name="p">The Chromium process</param>
 /// <returns></returns>
 public virtual Task StartAsync(ChromiumProcess p) => Task.FromException(InvalidOperation("start"));
 /// <summary>
 /// Handles process exit request.
 /// </summary>
 /// <param name="p">The Chromium process</param>
 /// <param name="timeout">The maximum waiting time for a graceful process exit.</param>
 /// <returns></returns>
 public virtual Task ExitAsync(ChromiumProcess p, TimeSpan timeout) => Task.FromException(InvalidOperation("exit"));
Ejemplo n.º 10
0
 public override void Dispose(ChromiumProcess p)
 {
     // Nothing to do
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Notifies that state machine is about to transition to another state.
 /// </summary>
 /// <param name="p">The Chromium process</param>
 protected virtual void Leave(ChromiumProcess p)
 {
 }
Ejemplo n.º 12
0
 public override Task WaitForExitAsync(ChromiumProcess p) => Task.FromResult(false);
Ejemplo n.º 13
0
 public override Task KillAsync(ChromiumProcess p) => Task.FromResult(false);
Ejemplo n.º 14
0
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout) => Task.FromResult(false);
Ejemplo n.º 15
0
 public override Task StartAsync(ChromiumProcess p) => p._startCompletionSource.Task;
Ejemplo n.º 16
0
 /// <summary>
 /// Handles process kill request.
 /// </summary>
 /// <param name="p">The Chromium process</param>
 /// <returns></returns>
 public virtual Task KillAsync(ChromiumProcess p) => Task.FromException(InvalidOperation("kill"));
Ejemplo n.º 17
0
 public override void Dispose(ChromiumProcess p)
 {
     p._startCompletionSource.TrySetException(new ObjectDisposedException(p.ToString()));
     base.Dispose(p);
 }
Ejemplo n.º 18
0
 /// <summary>
 /// Handles wait for process exit request.
 /// </summary>
 /// <param name="p">The Chromium process</param>
 /// <returns></returns>
 public virtual Task WaitForExitAsync(ChromiumProcess p) => p._exitCompletionSource.Task;
Ejemplo n.º 19
0
 protected override void Leave(ChromiumProcess p)
 => LogProcessCount(p, Interlocked.Decrement(ref _processCount));
Ejemplo n.º 20
0
 /// <summary>
 /// Handles disposal of process and temporary user directory
 /// </summary>
 /// <param name="p"></param>
 public virtual void Dispose(ChromiumProcess p) => Disposed.EnterFrom(p, this);
Ejemplo n.º 21
0
 public Task EnterFromAsync(ChromiumProcess p, State fromState, TimeSpan timeout)
 => !TryEnter(p, fromState) ? p._currentState.ExitAsync(p, timeout) : ExitAsync(p, timeout);
Ejemplo n.º 22
0
 public override Task StartAsync(ChromiumProcess p) => Starting.EnterFromAsync(p, this);
Ejemplo n.º 23
0
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout) => WaitForExitAsync(p);
Ejemplo n.º 24
0
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout)
 {
     Exited.EnterFrom(p, this);
     return(Task.CompletedTask);
 }
Ejemplo n.º 25
0
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout) => Task.CompletedTask;
Ejemplo n.º 26
0
 public override Task KillAsync(ChromiumProcess p)
 {
     Exited.EnterFrom(p, this);
     return(Task.CompletedTask);
 }
Ejemplo n.º 27
0
 public override Task WaitForExitAsync(ChromiumProcess p) => Task.CompletedTask;
Ejemplo n.º 28
0
 public override Task WaitForExitAsync(ChromiumProcess p) => Task.FromException(InvalidOperation("wait for exit"));
Ejemplo n.º 29
0
 public override Task KillAsync(ChromiumProcess p) => throw new ObjectDisposedException(p.ToString());
Ejemplo n.º 30
0
 public override Task ExitAsync(ChromiumProcess p, TimeSpan timeout)
 {
     Exited.EnterFrom(p, this);
     return(Task.FromResult(false));
 }