SqlClientWrapperSmiStream.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //------------------------------------------------------------------------------
  2. // <copyright file="SqlClientWrapperSmiStream.cs" company="Microsoft">
  3. // Copyright (c) Microsoft Corporation. All rights reserved.
  4. // </copyright>
  5. // <owner current="true" primary="true">[....]</owner>
  6. // <owner current="true" primary="false">[....]</owner>
  7. //------------------------------------------------------------------------------
  8. namespace Microsoft.SqlServer.Server {
  9. using System;
  10. using System.Data.Common;
  11. using System.Diagnostics;
  12. using System.IO;
  13. // Simple wrapper over SmiStream that handles server events on the SqlClient side of Smi
  14. internal class SqlClientWrapperSmiStream : Stream {
  15. private SmiEventSink_Default _sink;
  16. private SmiStream _stream;
  17. internal SqlClientWrapperSmiStream( SmiEventSink_Default sink, SmiStream stream ) {
  18. Debug.Assert( null != sink );
  19. Debug.Assert( null != stream );
  20. _sink = sink;
  21. _stream = stream;
  22. }
  23. public override bool CanRead {
  24. get {
  25. return _stream.CanRead;
  26. }
  27. }
  28. // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
  29. public override bool CanSeek {
  30. get {
  31. return _stream.CanSeek;
  32. }
  33. }
  34. public override bool CanWrite {
  35. get {
  36. return _stream.CanWrite;
  37. }
  38. }
  39. public override long Length {
  40. get {
  41. long length = _stream.GetLength( _sink );
  42. _sink.ProcessMessagesAndThrow();
  43. return length;
  44. }
  45. }
  46. public override long Position {
  47. get {
  48. long position = _stream.GetPosition( _sink );
  49. _sink.ProcessMessagesAndThrow();
  50. return position;
  51. }
  52. set {
  53. _stream.SetPosition( _sink, value );
  54. _sink.ProcessMessagesAndThrow();
  55. }
  56. }
  57. public override void Flush() {
  58. _stream.Flush( _sink );
  59. _sink.ProcessMessagesAndThrow();
  60. }
  61. public override long Seek(long offset, SeekOrigin origin) {
  62. long result = _stream.Seek( _sink, offset, origin );
  63. _sink.ProcessMessagesAndThrow();
  64. return result;
  65. }
  66. public override void SetLength(long value) {
  67. _stream.SetLength( _sink, value );
  68. _sink.ProcessMessagesAndThrow();
  69. }
  70. public override int Read(byte[] buffer, int offset, int count) {
  71. int bytesRead = _stream.Read( _sink, buffer, offset, count );
  72. _sink.ProcessMessagesAndThrow();
  73. return bytesRead;
  74. }
  75. public override void Write(byte[] buffer, int offset, int count) {
  76. _stream.Write( _sink, buffer, offset, count );
  77. _sink.ProcessMessagesAndThrow();
  78. }
  79. }
  80. }