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
- SoapMessage.cs
- MetadataItem_Static.cs
- GatewayIPAddressInformationCollection.cs
- FrameworkElement.cs
- ReliabilityContractAttribute.cs
- SectionInput.cs
- InvalidChannelBindingException.cs
- ReflectionHelper.cs
- ValueUtilsSmi.cs
- Compress.cs
- XmlAttribute.cs
- TextServicesCompartmentContext.cs
- DesignSurfaceEvent.cs
- WCFBuildProvider.cs
- ResXResourceReader.cs
- ResourceReferenceKeyNotFoundException.cs
- RegexWorker.cs
- RegexCaptureCollection.cs
- Triangle.cs
- DelegateTypeInfo.cs
- SimpleTypeResolver.cs
- SchemaImporterExtension.cs
- CellQuery.cs
- ComponentCollection.cs
- TableLayoutPanelCellPosition.cs
- GroupStyle.cs
- ResourcesGenerator.cs
- SkewTransform.cs
- HTTPNotFoundHandler.cs
- SqlNodeAnnotations.cs
- PermissionSet.cs
- ShapeTypeface.cs
- PeerResolverMode.cs
- CollectionContainer.cs
- XPathNodeList.cs
- ToolStripSeparatorRenderEventArgs.cs
- OciLobLocator.cs
- RowUpdatingEventArgs.cs
- SamlSubject.cs
- WebZoneDesigner.cs
- DBDataPermissionAttribute.cs
- XmlSequenceWriter.cs
- TableCellCollection.cs
- CompressStream.cs
- Region.cs
- BitmapSizeOptions.cs
- CompilationRelaxations.cs
- WebScriptMetadataInstanceContextProvider.cs
- DbException.cs
- PeerResolver.cs
- PrinterResolution.cs
- BaseCollection.cs
- PackageRelationship.cs
- Splitter.cs
- PolyBezierSegmentFigureLogic.cs
- MimeMultiPart.cs
- RadioButtonRenderer.cs
- MediaContextNotificationWindow.cs
- PkcsMisc.cs
- ZoomComboBox.cs
- SafeViewOfFileHandle.cs
- InputElement.cs
- EntityDataSourceMemberPath.cs
- FastEncoderWindow.cs
- XmlCustomFormatter.cs
- TransformConverter.cs
- NullRuntimeConfig.cs
- DBPropSet.cs
- LogWriteRestartAreaState.cs
- WebPartConnectionsConfigureVerb.cs
- WebPartEditVerb.cs
- WorkflowServiceNamespace.cs
- MailSettingsSection.cs
- ToolStripMenuItem.cs
- SerializationHelper.cs
- CacheMemory.cs
- ScriptingWebServicesSectionGroup.cs
- DelayedRegex.cs
- FilteredSchemaElementLookUpTable.cs
- VectorValueSerializer.cs
- XNodeValidator.cs
- DependencyPropertyValueSerializer.cs
- PartitionerQueryOperator.cs
- WindowsFormsSectionHandler.cs
- XPathNodePointer.cs
- ConfigXmlElement.cs
- Path.cs
- GlobalAllocSafeHandle.cs
- ElementFactory.cs
- MenuBindingsEditorForm.cs
- TextElementCollectionHelper.cs
- SynchronizationFilter.cs
- DBSchemaTable.cs
- SrgsToken.cs
- TextDocumentView.cs
- TransformGroup.cs
- ToolStripLocationCancelEventArgs.cs
- EntityUtil.cs
- TypedTableBaseExtensions.cs
- Fx.cs