Декорируем Stream (запрет чтения после заданного тайм-аута) - C#

Узнай цену своей работы

Формулировка задачи:

Задача такая, нужно задекорировать класс Stream(запрещает считывание после заданного тайм аута). Расскажите что к чему. И если можно с примерами.

Решение задачи: «Декорируем Stream (запрет чтения после заданного тайм-аута)»

textual
Листинг программы
  1.     public class TimeoutedStream : Stream
  2.     {
  3.         public int TimeoutToRead { get; set; }
  4.         Stream Stream { get; set; }
  5.  
  6.         public TimeoutedStream(Stream stream)
  7.         {
  8.             this.Stream = stream;
  9.             ReadTimeout = 1000;
  10.         }
  11.  
  12.         private DateTime lastReadTime;
  13.  
  14.         public override int Read(byte[] buffer, int offset, int count)
  15.         {
  16.             var interval = (DateTime.Now - lastReadTime).TotalMilliseconds;
  17.             lastReadTime = DateTime.Now;
  18.  
  19.             if (interval < ReadTimeout)
  20.                 return Stream.Read(buffer, offset, count);
  21.  
  22.             throw new TimeoutException();
  23.         }
  24.  
  25.         #region Перевызовы базового потока
  26.  
  27.         public override bool CanRead
  28.         {
  29.             get { return Stream.CanRead; }
  30.         }
  31.  
  32.         public override bool CanSeek
  33.         {
  34.             get { return Stream.CanSeek; }
  35.         }
  36.  
  37.         public override bool CanWrite
  38.         {
  39.             get { return Stream.CanWrite; }
  40.         }
  41.  
  42.         public override void Flush()
  43.         {
  44.             Stream.Flush();
  45.         }
  46.  
  47.         public override long Length
  48.         {
  49.             get { return Stream.Length; }
  50.         }
  51.  
  52.         public override long Position
  53.         {
  54.             get { return Stream.Position; }
  55.             set { Stream.Position = value; }
  56.         }
  57.  
  58.         public override long Seek(long offset, SeekOrigin origin)
  59.         {
  60.             Stream.Seek(offset, origin);
  61.         }
  62.  
  63.         public override void SetLength(long value)
  64.         {
  65.             Stream.SetLength(value);
  66.         }
  67.  
  68.         public override void Write(byte[] buffer, int offset, int count)
  69.         {
  70.             Stream.Write(buffer, offset, count);
  71.         }
  72.  
  73.         #endregion
  74.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы