Skip to content

Commit b946bb4

Browse files
committed
Add JoinedReadWriteStream to return proper read/write stream
1 parent 1b50524 commit b946bb4

File tree

1 file changed

+91
-0
lines changed

1 file changed

+91
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
using System.IO;
2+
3+
namespace Docker.DotNet.SSH
4+
{
5+
internal class JoinedReadWriteStream : Stream
6+
{
7+
private Stream _readStream;
8+
private Stream _writeStream;
9+
10+
public JoinedReadWriteStream(Stream read, Stream write)
11+
{
12+
_readStream = read;
13+
_writeStream = write;
14+
}
15+
16+
public override bool CanRead => _readStream.CanRead;
17+
18+
public override bool CanSeek => false;
19+
20+
public override bool CanWrite => _writeStream.CanWrite;
21+
22+
#region Not implemented methods
23+
24+
public override long Length => throw new System.NotImplementedException();
25+
26+
public override long Position { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }
27+
28+
public override long Seek(long offset, SeekOrigin origin)
29+
{
30+
throw new System.NotImplementedException();
31+
}
32+
33+
public override void SetLength(long value)
34+
{
35+
throw new System.NotImplementedException();
36+
}
37+
38+
#endregion
39+
40+
public override void Flush()
41+
{
42+
_writeStream.Flush();
43+
}
44+
45+
public override int Read(byte[] buffer, int offset, int count)
46+
{
47+
return _readStream.Read(buffer, offset, count);
48+
}
49+
50+
public override void Write(byte[] buffer, int offset, int count)
51+
{
52+
_writeStream.Write(buffer, offset, count);
53+
}
54+
55+
public override void Close()
56+
{
57+
try
58+
{
59+
_writeStream.Close();
60+
}
61+
finally
62+
{
63+
_readStream.Close();
64+
}
65+
66+
base.Close();
67+
}
68+
69+
public override int GetHashCode()
70+
{
71+
return _readStream.GetHashCode() ^ _writeStream.GetHashCode();
72+
}
73+
74+
protected override void Dispose(bool disposing)
75+
{
76+
if (disposing)
77+
{
78+
try
79+
{
80+
_writeStream.Dispose();
81+
}
82+
finally
83+
{
84+
_readStream.Dispose();
85+
}
86+
}
87+
88+
base.Dispose(disposing);
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)