private void Flush(IObserver <CharactersOut> observer) { YieldNewLinesToOnNext(ref _bufferStdErr, buffer => observer.OnNext(ConsoleOut.ErrorOut(buffer))); FlushRemainder(ref _bufferStdErr, buffer => observer.OnNext(ConsoleOut.ErrorOut(buffer))); YieldNewLinesToOnNext(ref _bufferStdOut, buffer => observer.OnNext(ConsoleOut.Out(buffer))); FlushRemainder(ref _bufferStdOut, buffer => observer.OnNext(ConsoleOut.Out(buffer))); }
private void OnNextSource(ConsoleOut c, IObserver <CharactersOut> observer) { c.OutOrErrrorCharacters(OutCharacters, ErrorCharacters); if (c.Error) { YieldNewLinesToOnNext(ref _bufferStdErr, buffer => observer.OnNext(ConsoleOut.ErrorOut(buffer))); } else { YieldNewLinesToOnNext(ref _bufferStdOut, buffer => observer.OnNext(ConsoleOut.Out(buffer))); } }
public static IObservable <LineOut> ObserveErrorOutLineByLine(this Process process) { var receivedStdErr = Observable.FromEventPattern <DataReceivedEventHandler, DataReceivedEventArgs> (h => process.ErrorDataReceived += h, h => process.ErrorDataReceived -= h) .Where(e => e.EventArgs.Data != null) .Select(e => ConsoleOut.ErrorOut(e.EventArgs.Data)); return(Observable.Create <LineOut>(observer => { var cancel = Disposable.Create(() => { try { process.CancelErrorRead(); } catch (InvalidOperationException) { } }); return new CompositeDisposable(cancel, receivedStdErr.Subscribe(observer)); })); }
private static void OnNextFlush(CharactersOut c, IObserver <CharactersOut> observer) => observer.OnNext(c.Error ? ConsoleOut.ErrorOut(c.Characters) : ConsoleOut.Out(c.Characters));