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