Декорируем Stream (запрет чтения после заданного тайм-аута) - C#
Формулировка задачи:
Задача такая, нужно задекорировать класс Stream(запрещает считывание после заданного тайм аута). Расскажите что к чему. И если можно с примерами.
Решение задачи: «Декорируем Stream (запрет чтения после заданного тайм-аута)»
textual
Листинг программы
public class TimeoutedStream : Stream
{
public int TimeoutToRead { get; set; }
Stream Stream { get; set; }
public TimeoutedStream(Stream stream)
{
this.Stream = stream;
ReadTimeout = 1000;
}
private DateTime lastReadTime;
public override int Read(byte[] buffer, int offset, int count)
{
var interval = (DateTime.Now - lastReadTime).TotalMilliseconds;
lastReadTime = DateTime.Now;
if (interval < ReadTimeout)
return Stream.Read(buffer, offset, count);
throw new TimeoutException();
}
#region Перевызовы базового потока
public override bool CanRead
{
get { return Stream.CanRead; }
}
public override bool CanSeek
{
get { return Stream.CanSeek; }
}
public override bool CanWrite
{
get { return Stream.CanWrite; }
}
public override void Flush()
{
Stream.Flush();
}
public override long Length
{
get { return Stream.Length; }
}
public override long Position
{
get { return Stream.Position; }
set { Stream.Position = value; }
}
public override long Seek(long offset, SeekOrigin origin)
{
Stream.Seek(offset, origin);
}
public override void SetLength(long value)
{
Stream.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
Stream.Write(buffer, offset, count);
}
#endregion
}