1 //------------------------------------------------------------------------------
2 // <copyright file="SqlClientWrapperSmiStream.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">Microsoft</owner>
6 // <owner current="true" primary="false">Microsoft</owner>
7 //------------------------------------------------------------------------------
9 namespace Microsoft.SqlServer.Server {
11 using System.Data.Common;
12 using System.Diagnostics;
15 // Simple wrapper over SmiStream that handles server events on the SqlClient side of Smi
16 internal class SqlClientWrapperSmiStream : Stream {
18 private SmiEventSink_Default _sink;
19 private SmiStream _stream;
21 internal SqlClientWrapperSmiStream( SmiEventSink_Default sink, SmiStream stream ) {
22 Debug.Assert( null != sink );
23 Debug.Assert( null != stream );
28 public override bool CanRead {
30 return _stream.CanRead;
34 // If CanSeek is false, Position, Seek, Length, and SetLength should throw.
35 public override bool CanSeek {
37 return _stream.CanSeek;
41 public override bool CanWrite {
43 return _stream.CanWrite;
47 public override long Length {
49 long length = _stream.GetLength( _sink );
50 _sink.ProcessMessagesAndThrow();
55 public override long Position {
57 long position = _stream.GetPosition( _sink );
58 _sink.ProcessMessagesAndThrow();
62 _stream.SetPosition( _sink, value );
63 _sink.ProcessMessagesAndThrow();
67 public override void Flush() {
68 _stream.Flush( _sink );
69 _sink.ProcessMessagesAndThrow();
72 public override long Seek(long offset, SeekOrigin origin) {
73 long result = _stream.Seek( _sink, offset, origin );
74 _sink.ProcessMessagesAndThrow();
78 public override void SetLength(long value) {
79 _stream.SetLength( _sink, value );
80 _sink.ProcessMessagesAndThrow();
83 public override int Read(byte[] buffer, int offset, int count) {
84 int bytesRead = _stream.Read( _sink, buffer, offset, count );
85 _sink.ProcessMessagesAndThrow();
89 public override void Write(byte[] buffer, int offset, int count) {
90 _stream.Write( _sink, buffer, offset, count );
91 _sink.ProcessMessagesAndThrow();