using System; using System.IO; using System.Security.Permissions; using System.Text; using AspClassic.Scripting.Runtime; using AspClassic.Scripting.Utils; namespace AspClassic.Scripting.Hosting; public sealed class ScriptIO : MarshalByRefObject { private readonly SharedIO _io; public Stream InputStream => _io.InputStream; public Stream OutputStream => _io.OutputStream; public Stream ErrorStream => _io.ErrorStream; public TextReader InputReader => _io.InputReader; public TextWriter OutputWriter => _io.OutputWriter; public TextWriter ErrorWriter => _io.ErrorWriter; public Encoding InputEncoding => _io.InputEncoding; public Encoding OutputEncoding => _io.OutputEncoding; public Encoding ErrorEncoding => _io.ErrorEncoding; internal SharedIO SharedIO => _io; internal ScriptIO(SharedIO io) { _io = io; } public void SetOutput(Stream stream, Encoding encoding) { ContractUtils.RequiresNotNull(stream, "stream"); ContractUtils.RequiresNotNull(encoding, "encoding"); _io.SetOutput(stream, new StreamWriter(stream, encoding)); } public void SetOutput(Stream stream, TextWriter writer) { ContractUtils.RequiresNotNull(stream, "stream"); ContractUtils.RequiresNotNull(writer, "writer"); _io.SetOutput(stream, writer); } public void SetErrorOutput(Stream stream, Encoding encoding) { ContractUtils.RequiresNotNull(stream, "stream"); ContractUtils.RequiresNotNull(encoding, "encoding"); _io.SetErrorOutput(stream, new StreamWriter(stream, encoding)); } public void SetErrorOutput(Stream stream, TextWriter writer) { ContractUtils.RequiresNotNull(stream, "stream"); ContractUtils.RequiresNotNull(writer, "writer"); _io.SetErrorOutput(stream, writer); } public void SetInput(Stream stream, Encoding encoding) { ContractUtils.RequiresNotNull(stream, "stream"); ContractUtils.RequiresNotNull(encoding, "encoding"); _io.SetInput(stream, new StreamReader(stream, encoding), encoding); } public void SetInput(Stream stream, TextReader reader, Encoding encoding) { ContractUtils.RequiresNotNull(stream, "stream"); ContractUtils.RequiresNotNull(reader, "writer"); ContractUtils.RequiresNotNull(encoding, "encoding"); _io.SetInput(stream, reader, encoding); } public void RedirectToConsole() { _io.RedirectToConsole(); } [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.Infrastructure)] public override object InitializeLifetimeService() { return null; } }