Декорируем 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
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д