// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Text; namespace Microsoft.AspNetCore.NodeServices.Util { /// /// Captures the completed-line notifications from a , /// combining the data into a single . /// internal class EventedStreamStringReader : IDisposable { private EventedStreamReader _eventedStreamReader; private bool _isDisposed; private StringBuilder _stringBuilder = new StringBuilder(); public EventedStreamStringReader(EventedStreamReader eventedStreamReader) { _eventedStreamReader = eventedStreamReader ?? throw new ArgumentNullException(nameof(eventedStreamReader)); _eventedStreamReader.OnReceivedLine += OnReceivedLine; } public string ReadAsString() => _stringBuilder.ToString(); private void OnReceivedLine(string line) => _stringBuilder.AppendLine(line); public void Dispose() { if (!_isDisposed) { _eventedStreamReader.OnReceivedLine -= OnReceivedLine; _isDisposed = true; } } } }