You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

61 lines
1.5 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace IllusionInjector.Utilities
  8. {
  9. class BlockingStream : Stream
  10. {
  11. public BlockingStream(Stream bstr)
  12. {
  13. BaseStream = bstr;
  14. }
  15. public Stream BaseStream { get; set; }
  16. public override bool CanRead => BaseStream.CanRead;
  17. public override bool CanSeek => BaseStream.CanSeek;
  18. public override bool CanWrite => BaseStream.CanWrite;
  19. public override long Length => BaseStream.Length;
  20. public override long Position { get => BaseStream.Position; set => BaseStream.Position = value; }
  21. public override void Flush()
  22. {
  23. BaseStream.Flush();
  24. }
  25. public override int Read(byte[] buffer, int offset, int count)
  26. {
  27. var read = 0;
  28. do
  29. {
  30. read += BaseStream.Read(buffer, read, count-read);
  31. }
  32. while (read < count);
  33. return count;
  34. }
  35. public override long Seek(long offset, SeekOrigin origin)
  36. {
  37. return BaseStream.Seek(offset, origin);
  38. }
  39. public override void SetLength(long value)
  40. {
  41. BaseStream.SetLength(value);
  42. }
  43. public override void Write(byte[] buffer, int offset, int count)
  44. {
  45. BaseStream.Write(buffer, offset, count);
  46. }
  47. }
  48. }