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
- SqlRowUpdatedEvent.cs
- Underline.cs
- ListView.cs
- ListView.cs
- StronglyTypedResourceBuilder.cs
- DataGridViewCell.cs
- OpCodes.cs
- PersonalizationProvider.cs
- VariableAction.cs
- PromptBuilder.cs
- ModelEditingScope.cs
- UserPersonalizationStateInfo.cs
- CreateWorkflowOwnerCommand.cs
- StyleCollectionEditor.cs
- ToolBarTray.cs
- MenuItemStyle.cs
- TextContainerChangedEventArgs.cs
- ConfigDefinitionUpdates.cs
- URLString.cs
- EllipticalNodeOperations.cs
- TextRunCache.cs
- CurrentChangingEventManager.cs
- ApplicationFileCodeDomTreeGenerator.cs
- PolyBezierSegmentFigureLogic.cs
- ServiceEndpointCollection.cs
- _NetworkingPerfCounters.cs
- RemotingServices.cs
- ReflectionHelper.cs
- ToolStripItemTextRenderEventArgs.cs
- SimpleMailWebEventProvider.cs
- ThousandthOfEmRealDoubles.cs
- SmtpClient.cs
- Point4DValueSerializer.cs
- FileVersion.cs
- SqlDataSourceView.cs
- Gdiplus.cs
- METAHEADER.cs
- ResetableIterator.cs
- Polygon.cs
- XmlEncodedRawTextWriter.cs
- ControlBuilder.cs
- DispatchChannelSink.cs
- StringInfo.cs
- MorphHelper.cs
- NullableFloatAverageAggregationOperator.cs
- PartialTrustVisibleAssembly.cs
- ComplexTypeEmitter.cs
- SqlCacheDependency.cs
- Partitioner.cs
- ReachDocumentReferenceSerializerAsync.cs
- WindowsToolbar.cs
- AutoSizeToolBoxItem.cs
- SweepDirectionValidation.cs
- ExceptionUtil.cs
- TrackingQuery.cs
- ResourcePool.cs
- XmlLanguage.cs
- GeneralTransform3DTo2D.cs
- DocumentViewerConstants.cs
- BamlResourceSerializer.cs
- TransactionManager.cs
- Select.cs
- BufferedReceiveElement.cs
- DispatcherHookEventArgs.cs
- ValidationPropertyAttribute.cs
- EmulateRecognizeCompletedEventArgs.cs
- UnauthorizedWebPart.cs
- ArraySubsetEnumerator.cs
- WebControlAdapter.cs
- SystemTcpConnection.cs
- FolderBrowserDialog.cs
- MapPathBasedVirtualPathProvider.cs
- CompositeTypefaceMetrics.cs
- SQLConvert.cs
- HwndSourceKeyboardInputSite.cs
- OleServicesContext.cs
- CommandManager.cs
- MobileControlDesigner.cs
- LinqDataSourceDeleteEventArgs.cs
- DataRecordInfo.cs
- HtmlLink.cs
- XamlBuildTaskServices.cs
- UnsafeNativeMethods.cs
- DynamicUpdateCommand.cs
- MethodSignatureGenerator.cs
- InvalidCastException.cs
- EditingScope.cs
- StringPropertyBuilder.cs
- DataSourceCacheDurationConverter.cs
- ProfilePropertyNameValidator.cs
- TcpAppDomainProtocolHandler.cs
- ListBox.cs
- TrustLevelCollection.cs
- ConnectionOrientedTransportChannelFactory.cs
- Base64Encoding.cs
- OleDbCommand.cs
- TreeViewHitTestInfo.cs
- InstanceKeyNotReadyException.cs
- ASCIIEncoding.cs
- BinaryObjectReader.cs