using System;
using System.IO;
namespace XP.Hardware.RaySource.Comet.Host.Pipe
{
///
/// 管道写入流包装器
/// 重写 Flush() 为空操作,避免 StreamWriter.AutoFlush 触发
/// NamedPipe 的 FlushFileBuffers(该 API 会阻塞直到对端读取数据)
/// Write 操作直接写入底层管道的内核缓冲区,对端可立即读取
///
internal class WriteOnlyPipeStream : Stream
{
private readonly Stream _inner;
public WriteOnlyPipeStream(Stream inner)
{
_inner = inner;
}
public override bool CanRead => false;
public override bool CanSeek => false;
public override bool CanWrite => _inner.CanWrite;
public override long Length => _inner.Length;
public override long Position
{
get => _inner.Position;
set => _inner.Position = value;
}
public override void Write(byte[] buffer, int offset, int count)
{
_inner.Write(buffer, offset, count);
}
///
/// 空操作,不调用底层管道的 Flush(FlushFileBuffers)
///
public override void Flush()
{
// 故意不调用 _inner.Flush()
}
public override int Read(byte[] buffer, int offset, int count) => throw new NotSupportedException();
public override long Seek(long offset, SeekOrigin origin) => throw new NotSupportedException();
public override void SetLength(long value) => throw new NotSupportedException();
protected override void Dispose(bool disposing)
{
// 不释放底层流,由调用方统一管理
base.Dispose(disposing);
}
}
}