Mercurial > hg > ucis.core
comparison Util/AsyncStream.cs @ 0:3ab940a0c7a0
Initial commit
author | Ivo Smits <Ivo@UCIS.nl> |
---|---|
date | Tue, 11 Sep 2012 16:28:53 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3ab940a0c7a0 |
---|---|
1 using System; | |
2 using System.IO; | |
3 | |
4 namespace UCIS.Util { | |
5 public class AsyncStreamWrapper : Stream { | |
6 ReadDelegate readDelegate; | |
7 WriteDelegate writeDelegate; | |
8 | |
9 public Stream BaseStream { get; private set; } | |
10 | |
11 public AsyncStreamWrapper(Stream stream) { | |
12 BaseStream = stream; | |
13 readDelegate = (ReadDelegate)Read; | |
14 writeDelegate = (WriteDelegate)Write; | |
15 } | |
16 | |
17 public override int Read(byte[] buffer, int offset, int count) { return BaseStream.Read(buffer, offset, count); } | |
18 public override void Write(byte[] buffer, int offset, int count) { BaseStream.Write(buffer, offset, count); } | |
19 public override void Close() { BaseStream.Close(); } | |
20 | |
21 public override bool CanRead { get { return BaseStream.CanRead; } } | |
22 public override bool CanSeek { get { return BaseStream.CanSeek; } } | |
23 public override bool CanTimeout { get { return BaseStream.CanTimeout ; } } | |
24 public override bool CanWrite { get { return BaseStream.CanWrite ; } } | |
25 | |
26 public override int ReadTimeout { | |
27 get { return BaseStream.ReadTimeout; } | |
28 set { BaseStream.ReadTimeout = value; } | |
29 } | |
30 public override int WriteTimeout { | |
31 get { return BaseStream.WriteTimeout; } | |
32 set { BaseStream.WriteTimeout = value; } | |
33 } | |
34 | |
35 public override void Flush() { BaseStream.Flush(); } | |
36 public override long Length { get { return BaseStream.Length; } } | |
37 public override long Position { | |
38 get { return BaseStream.Position; } | |
39 set { BaseStream.Position = value; } | |
40 } | |
41 public override long Seek(long offset, SeekOrigin origin) { return BaseStream.Seek(offset, origin); } | |
42 public override void SetLength(long value) { BaseStream.SetLength(value); } | |
43 | |
44 public override int ReadByte() { return base.ReadByte(); } | |
45 public override void WriteByte(byte value) { BaseStream.WriteByte(value); } | |
46 | |
47 private delegate int ReadDelegate(byte[] buffer, int offset, int count); | |
48 private delegate void WriteDelegate(byte[] buffer, int offset, int count); | |
49 | |
50 public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { | |
51 return readDelegate.BeginInvoke(buffer, offset, count, callback, state); | |
52 } | |
53 public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { | |
54 return writeDelegate.BeginInvoke(buffer, offset, count, callback, state); | |
55 } | |
56 public override int EndRead(IAsyncResult asyncResult) { | |
57 return readDelegate.EndInvoke(asyncResult); | |
58 } | |
59 public override void EndWrite(IAsyncResult asyncResult) { | |
60 writeDelegate.EndInvoke(asyncResult); | |
61 } | |
62 } | |
63 public abstract class AsyncStream : Stream { | |
64 ReadDelegate readDelegate; | |
65 WriteDelegate writeDelegate; | |
66 | |
67 public AsyncStream() { | |
68 readDelegate = (ReadDelegate)Read; | |
69 writeDelegate = (WriteDelegate)Write; | |
70 } | |
71 | |
72 private delegate int ReadDelegate(byte[] buffer, int offset, int count); | |
73 private delegate void WriteDelegate(byte[] buffer, int offset, int count); | |
74 | |
75 public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { | |
76 return readDelegate.BeginInvoke(buffer, offset, count, callback, state); | |
77 } | |
78 public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) { | |
79 return writeDelegate.BeginInvoke(buffer, offset, count, callback, state); | |
80 } | |
81 public override int EndRead(IAsyncResult asyncResult) { | |
82 return readDelegate.EndInvoke(asyncResult); | |
83 } | |
84 public override void EndWrite(IAsyncResult asyncResult) { | |
85 writeDelegate.EndInvoke(asyncResult); | |
86 } | |
87 } | |
88 } |