57 lines
1.9 KiB
C#
57 lines
1.9 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace VRC.SDKBase.Editor.VTP
|
|
{
|
|
// A mock for testing VTP code that expects a network stream.
|
|
public class MockNetworkStream : Stream
|
|
{
|
|
// Since with a network stream you can write to the stream and you won't read back what you wrote, we have to use two memory streams to implement that.
|
|
public MemoryStream incomingStream;
|
|
public MemoryStream outgoingStream;
|
|
|
|
public MockNetworkStream(MemoryStream incomingStream, MemoryStream outgoingStream)
|
|
{
|
|
this.incomingStream = incomingStream;
|
|
this.outgoingStream = outgoingStream;
|
|
}
|
|
|
|
public override bool CanRead => true;
|
|
|
|
public override bool CanSeek => false;
|
|
|
|
public override bool CanWrite => true;
|
|
public override long Length => incomingStream.Length;
|
|
public override long Position { get; set; }
|
|
|
|
public override void Flush()
|
|
{
|
|
outgoingStream.Flush();
|
|
}
|
|
|
|
public override int Read(byte[] buffer, int offset, int count)
|
|
{
|
|
if (Position < 0 || Position > incomingStream.Length)
|
|
throw new ArgumentOutOfRangeException(nameof(Position), "Position is out of bounds");
|
|
incomingStream.Position = Position;
|
|
int read = incomingStream.Read(buffer, offset, count);
|
|
Position += read;
|
|
return read;
|
|
}
|
|
|
|
public override long Seek(long offset, SeekOrigin origin)
|
|
{
|
|
throw new NotSupportedException($"Seek operation is not supported for {nameof(MockNetworkStream)}");
|
|
}
|
|
|
|
public override void SetLength(long value)
|
|
{
|
|
incomingStream.SetLength(value);
|
|
}
|
|
|
|
public override void Write(byte[] buffer, int offset, int count)
|
|
{
|
|
outgoingStream.Write(buffer, offset, count);
|
|
}
|
|
}
|
|
} |