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
- CompoundFileStreamReference.cs
- ResourceIDHelper.cs
- TraceContextRecord.cs
- CompositeFontParser.cs
- Point4D.cs
- mediaeventargs.cs
- ToolStripSeparatorRenderEventArgs.cs
- SortedDictionary.cs
- SystemWebExtensionsSectionGroup.cs
- ProcessingInstructionAction.cs
- IListConverters.cs
- SurrogateEncoder.cs
- StylusPointProperty.cs
- Inflater.cs
- BinaryCommonClasses.cs
- TableLayoutSettingsTypeConverter.cs
- Figure.cs
- DataGridViewLinkCell.cs
- HttpRequestBase.cs
- DescendantQuery.cs
- ConfigurationManagerHelper.cs
- ReferenceEqualityComparer.cs
- CheckBoxStandardAdapter.cs
- MethodInfo.cs
- DbParameterCollectionHelper.cs
- MergeFilterQuery.cs
- ScriptingProfileServiceSection.cs
- HuffmanTree.cs
- TopClause.cs
- TextBlock.cs
- Property.cs
- ClassHandlersStore.cs
- TargetParameterCountException.cs
- ResumeStoryboard.cs
- StringCollection.cs
- ObjectAnimationUsingKeyFrames.cs
- _emptywebproxy.cs
- TransactionFilter.cs
- WebZone.cs
- RewritingPass.cs
- X509ChainPolicy.cs
- StylusCaptureWithinProperty.cs
- XmlWellformedWriter.cs
- SmtpReplyReader.cs
- TransformValueSerializer.cs
- ValuePattern.cs
- mediaeventshelper.cs
- ObjectListSelectEventArgs.cs
- dataSvcMapFileLoader.cs
- ProviderConnectionPointCollection.cs
- ParenthesizePropertyNameAttribute.cs
- CodeNamespaceCollection.cs
- ComEventsSink.cs
- BaseUriHelper.cs
- StackOverflowException.cs
- RuleInfoComparer.cs
- _CacheStreams.cs
- CompareInfo.cs
- AppDomainFactory.cs
- Options.cs
- PolicyVersionConverter.cs
- ProtocolViolationException.cs
- FlowDocumentReader.cs
- SignalGate.cs
- SqlIdentifier.cs
- XmlDataCollection.cs
- DataTableExtensions.cs
- TrustManager.cs
- TimeoutException.cs
- Logging.cs
- DateTimeConverter2.cs
- WebReferencesBuildProvider.cs
- ContainerUtilities.cs
- NavigationPropertyEmitter.cs
- DataSourceControl.cs
- Hashtable.cs
- SecureUICommand.cs
- DocumentsTrace.cs
- Literal.cs
- CodeChecksumPragma.cs
- DbMetaDataColumnNames.cs
- PrintPreviewControl.cs
- HttpHeaderCollection.cs
- SuppressIldasmAttribute.cs
- AppSecurityManager.cs
- RedistVersionInfo.cs
- DbConnectionPoolIdentity.cs
- ThreadStartException.cs
- GradientSpreadMethodValidation.cs
- CryptoKeySecurity.cs
- WorkflowIdleElement.cs
- ComponentResourceManager.cs
- CatalogPartDesigner.cs
- StatementContext.cs
- MembershipSection.cs
- FontResourceCache.cs
- LassoHelper.cs
- MetadataCache.cs
- SaveLedgerEntryRequest.cs
- QuaternionAnimation.cs