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
- CompositeControl.cs
- LabelEditEvent.cs
- SqlCommandAsyncResult.cs
- DefaultAsyncDataDispatcher.cs
- LinqDataSourceSelectEventArgs.cs
- WindowsFormsEditorServiceHelper.cs
- ModelUIElement3D.cs
- ToolStripMenuItemDesigner.cs
- TextClipboardData.cs
- IconConverter.cs
- PageCache.cs
- ExceptionUtil.cs
- BuildDependencySet.cs
- ConfigUtil.cs
- LinkConverter.cs
- DocumentApplicationJournalEntry.cs
- ToolStripDropDownMenu.cs
- OpCellTreeNode.cs
- IndexedEnumerable.cs
- ConfigurationManagerInternal.cs
- WSFederationHttpSecurityMode.cs
- XsdValidatingReader.cs
- NullableLongSumAggregationOperator.cs
- FixedSOMElement.cs
- cookiecollection.cs
- CacheMemory.cs
- CqlParserHelpers.cs
- ExpressionNormalizer.cs
- RouteItem.cs
- HtmlShimManager.cs
- Calendar.cs
- NTAccount.cs
- UnsafeNativeMethods.cs
- MemberRestriction.cs
- AddInPipelineAttributes.cs
- InvalidProgramException.cs
- TypographyProperties.cs
- TreeView.cs
- WebPartsPersonalizationAuthorization.cs
- SQLByteStorage.cs
- ErrorTableItemStyle.cs
- DataGridAddNewRow.cs
- PersonalizationDictionary.cs
- ResourcePool.cs
- DriveInfo.cs
- TcpClientChannel.cs
- HatchBrush.cs
- PipelineDeploymentState.cs
- TypeConverter.cs
- GuidTagList.cs
- AttributeAction.cs
- HttpResponse.cs
- TypeGeneratedEventArgs.cs
- AuthenticationModuleElementCollection.cs
- ConfigurationSectionCollection.cs
- FlowLayout.cs
- OdbcError.cs
- Label.cs
- SoapServerProtocol.cs
- HtmlControlPersistable.cs
- ValidationRuleCollection.cs
- X509ChainElement.cs
- ScrollProperties.cs
- printdlgexmarshaler.cs
- TagPrefixCollection.cs
- GlobalizationSection.cs
- ObjectStateFormatter.cs
- Type.cs
- DynamicPropertyReader.cs
- IndentedTextWriter.cs
- ModuleConfigurationInfo.cs
- SpecularMaterial.cs
- OutputCacheSection.cs
- DateTimeValueSerializerContext.cs
- DataGridHeadersVisibilityToVisibilityConverter.cs
- RichTextBox.cs
- DataKeyArray.cs
- ResourceAssociationTypeEnd.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- DrawingContextDrawingContextWalker.cs
- InlineUIContainer.cs
- DoWorkEventArgs.cs
- BasicExpressionVisitor.cs
- PrimitiveXmlSerializers.cs
- XmlProcessingInstruction.cs
- Vector3D.cs
- QueuePathEditor.cs
- ButtonDesigner.cs
- ComMethodElementCollection.cs
- CrossAppDomainChannel.cs
- XmlSchemaSimpleTypeUnion.cs
- LogStream.cs
- HostedImpersonationContext.cs
- ItemMap.cs
- TextCompositionEventArgs.cs
- UserNameSecurityTokenAuthenticator.cs
- DesignColumnCollection.cs
- BufferedWebEventProvider.cs
- GridViewRowPresenter.cs
- FormatPage.cs