Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / IPC / PipeStream.cs / 1305376 / PipeStream.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //========================================================================== // File: PipeStream.cs // // Summary: Stream used for reading from a named pipe // Author: [....]@microsoft.com //========================================================================= using System; using System.IO; using System.Runtime.Remoting; namespace System.Runtime.Remoting.Channels.Ipc { // Basically the same as NetworkStream, but adds support for timeouts. internal sealed class PipeStream : Stream { private IpcPort _port; private int _timeout = 0; // throw timout exception if a read takes longer than this many milliseconds public PipeStream(IpcPort port) { if (port == null) throw new ArgumentNullException("port"); _port = port; } // SocketStream // Stream implementation public override bool CanRead { get { return true; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override long Length { get { throw new NotSupportedException(); } } public override long Position { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } // Position public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); } public override int Read(byte[] buffer, int offset, int size) { if (_timeout <= 0) { return _port.Read(buffer, offset, size); } else { IAsyncResult ar = _port.BeginRead(buffer, offset, size, null, null); if (_timeout>0 && !ar.IsCompleted) { ar.AsyncWaitHandle.WaitOne(_timeout, false); if (!ar.IsCompleted) throw new RemotingTimeoutException(); } return _port.EndRead(ar); } } // Read public override void Write(byte[] buffer, int offset, int count) { _port.Write(buffer, offset, count); } // Write protected override void Dispose(bool disposing) { try { if (disposing) _port.Dispose(); } finally { base.Dispose(disposing); } } public override void Flush() { } public override IAsyncResult BeginRead( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { IAsyncResult asyncResult = _port.BeginRead( buffer, offset, size, callback, state); return asyncResult; } // BeginRead public override int EndRead(IAsyncResult asyncResult) { return _port.EndRead(asyncResult); } // EndRead public override IAsyncResult BeginWrite( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { throw new NotSupportedException(); } // BeginWrite public override void EndWrite(IAsyncResult asyncResult) { throw new NotSupportedException(); } // EndWrite public override void SetLength(long value) { throw new NotSupportedException(); } } // class SocketStream } // namespace System.Runtime.Remoting.Channels // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //========================================================================== // File: PipeStream.cs // // Summary: Stream used for reading from a named pipe // Author: [....]@microsoft.com //========================================================================= using System; using System.IO; using System.Runtime.Remoting; namespace System.Runtime.Remoting.Channels.Ipc { // Basically the same as NetworkStream, but adds support for timeouts. internal sealed class PipeStream : Stream { private IpcPort _port; private int _timeout = 0; // throw timout exception if a read takes longer than this many milliseconds public PipeStream(IpcPort port) { if (port == null) throw new ArgumentNullException("port"); _port = port; } // SocketStream // Stream implementation public override bool CanRead { get { return true; } } public override bool CanSeek { get { return false; } } public override bool CanWrite { get { return true; } } public override long Length { get { throw new NotSupportedException(); } } public override long Position { get { throw new NotSupportedException(); } set { throw new NotSupportedException(); } } // Position public override long Seek(long offset, SeekOrigin origin) { throw new NotSupportedException(); } public override int Read(byte[] buffer, int offset, int size) { if (_timeout <= 0) { return _port.Read(buffer, offset, size); } else { IAsyncResult ar = _port.BeginRead(buffer, offset, size, null, null); if (_timeout>0 && !ar.IsCompleted) { ar.AsyncWaitHandle.WaitOne(_timeout, false); if (!ar.IsCompleted) throw new RemotingTimeoutException(); } return _port.EndRead(ar); } } // Read public override void Write(byte[] buffer, int offset, int count) { _port.Write(buffer, offset, count); } // Write protected override void Dispose(bool disposing) { try { if (disposing) _port.Dispose(); } finally { base.Dispose(disposing); } } public override void Flush() { } public override IAsyncResult BeginRead( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { IAsyncResult asyncResult = _port.BeginRead( buffer, offset, size, callback, state); return asyncResult; } // BeginRead public override int EndRead(IAsyncResult asyncResult) { return _port.EndRead(asyncResult); } // EndRead public override IAsyncResult BeginWrite( byte[] buffer, int offset, int size, AsyncCallback callback, Object state) { throw new NotSupportedException(); } // BeginWrite public override void EndWrite(IAsyncResult asyncResult) { throw new NotSupportedException(); } // EndWrite public override void SetLength(long value) { throw new NotSupportedException(); } } // class SocketStream } // namespace System.Runtime.Remoting.Channels // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListItemDetailViewAttribute.cs
- IndexedString.cs
- __Filters.cs
- DiscoveryRequestHandler.cs
- ObjectViewListener.cs
- WsdlServiceChannelBuilder.cs
- TransactedReceiveData.cs
- DiscoveryEndpointElement.cs
- Error.cs
- SettingsBindableAttribute.cs
- Drawing.cs
- ChangePassword.cs
- SafeBitVector32.cs
- SemanticBasicElement.cs
- XmlTypeMapping.cs
- RegexReplacement.cs
- ButtonChrome.cs
- ConfigurationConverterBase.cs
- ServiceMemoryGates.cs
- AdCreatedEventArgs.cs
- Message.cs
- DefaultValueTypeConverter.cs
- SafeEventLogReadHandle.cs
- BlobPersonalizationState.cs
- CaseKeyBox.xaml.cs
- CommandID.cs
- WebSysDisplayNameAttribute.cs
- PerformanceCounterLib.cs
- WindowsFormsHost.cs
- DataGridViewCellPaintingEventArgs.cs
- InstallerTypeAttribute.cs
- MenuItemBindingCollection.cs
- CatalogZoneBase.cs
- ObjectResult.cs
- CultureData.cs
- DocumentsTrace.cs
- CategoryAttribute.cs
- XPathNodeInfoAtom.cs
- LogAppendAsyncResult.cs
- HttpFileCollection.cs
- TraceFilter.cs
- FormatControl.cs
- ObjRef.cs
- SessionPageStateSection.cs
- ErrorTableItemStyle.cs
- Nullable.cs
- WebCodeGenerator.cs
- TablePattern.cs
- ProfileGroupSettings.cs
- ReferentialConstraint.cs
- RecognizeCompletedEventArgs.cs
- documentsequencetextpointer.cs
- ExtenderControl.cs
- FieldTemplateUserControl.cs
- XmlImplementation.cs
- KeyInfo.cs
- StatusBarAutomationPeer.cs
- AssemblySettingAttributes.cs
- SchemaTableColumn.cs
- ApplicationException.cs
- LinqDataSourceInsertEventArgs.cs
- FrameworkElement.cs
- UDPClient.cs
- UnsafeNativeMethods.cs
- ReadOnlyDataSourceView.cs
- EndpointBehaviorElementCollection.cs
- SettingsBindableAttribute.cs
- AnimationClock.cs
- PageStatePersister.cs
- DataGridViewAutoSizeModeEventArgs.cs
- MenuItemStyleCollection.cs
- SHA1.cs
- TextLine.cs
- TransformerInfoCollection.cs
- UnmanagedHandle.cs
- EntityProviderServices.cs
- AssemblyBuilder.cs
- XmlSchemaInclude.cs
- ValidationPropertyAttribute.cs
- WebPartTransformerAttribute.cs
- FontFaceLayoutInfo.cs
- XPathChildIterator.cs
- HtmlObjectListAdapter.cs
- Button.cs
- TextContainer.cs
- EntityViewContainer.cs
- Int64Storage.cs
- ColumnWidthChangingEvent.cs
- DocumentPageViewAutomationPeer.cs
- XmlAtomicValue.cs
- SimpleHandlerBuildProvider.cs
- StaticResourceExtension.cs
- DiscreteKeyFrames.cs
- MobileCategoryAttribute.cs
- InfoCardConstants.cs
- SQLInt32Storage.cs
- CodeDomConfigurationHandler.cs
- autovalidator.cs
- HtmlEmptyTagControlBuilder.cs
- XmlReader.cs