Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / IPC / IpcClientManager.cs / 1305376 / IpcClientManager.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //========================================================================== // File: IpcClientManager.cs // // Summary: Class for managing a client pipe connection. // //========================================================================= using System; using System.Collections; using System.IO; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading; using System.Runtime.Remoting.Channels.Tcp; using System.Globalization; namespace System.Runtime.Remoting.Channels.Ipc { // A client manager instance should encapsulate the port // for the purpose of reading a response internal class IpcClientHandler : IpcServerHandler { private bool _bOneWayRequest = false; // was the request made OneWay? private TcpReadingStream _responseStream = null; private int _contentLength; private bool _bChunked; private IpcClientTransportSink _sink = null; internal IpcClientHandler(IpcPort port, Stream stream, IpcClientTransportSink sink) : base (port, null, stream) { _sink = sink; } internal Stream GetResponseStream() { _responseStream = new TcpFixedLengthReadingStream(this, _contentLength); return _responseStream; } public new BaseTransportHeaders ReadHeaders() { BaseTransportHeaders headers = new BaseTransportHeaders(); UInt16 operation; ReadVersionAndOperation(out operation); // At this point, we're always expecting a Reply, so check for that. if (operation != TcpOperations.Reply) { throw new RemotingException( String.Format( CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Tcp_ExpectingReplyOp"), operation.ToString(CultureInfo.CurrentCulture))); } // content length must come next (may be chunked or a specific length) ReadContentLength(out _bChunked, out _contentLength); // read to end of headers ReadToEndOfHeaders(headers); return headers; } // ReadHeaders public override void OnInputStreamClosed() { // make sure we read to the end of the response stream if (_responseStream != null) { _responseStream.ReadToEnd(); _responseStream = null; } // return socket to the cache ReturnToCache(); } // OnInputStreamClosed internal void ReturnToCache() { _sink.Cache.ReleaseConnection(_port); } internal void SendRequest(IMessage msg, ITransportHeaders headers, Stream contentStream) { // Request is written just like a response // we can reuse the same code IMethodCallMessage mcm = (IMethodCallMessage)msg; int contentLength = (int)contentStream.Length; String uri = mcm.Uri; _bOneWayRequest = RemotingServices.IsOneWay(mcm.MethodBase); ChunkedMemoryStream headerStream = new ChunkedMemoryStream(CoreChannel.BufferPool); // output preamble and version WritePreambleAndVersion(headerStream); // output opcode if (!_bOneWayRequest) WriteUInt16(TcpOperations.Request, headerStream); else WriteUInt16(TcpOperations.OneWayRequest, headerStream); // output content delimiter style WriteUInt16(TcpContentDelimiter.ContentLength, headerStream); WriteInt32(contentLength, headerStream); // output request uri WriteUInt16(TcpHeaders.RequestUri, headerStream); WriteByte(TcpHeaderFormat.CountedString, headerStream); WriteCountedString(uri, headerStream); // output rest of headers WriteHeaders(headers, headerStream); headerStream.WriteTo(NetStream); headerStream.Close(); StreamHelper.CopyStream(contentStream, NetStream); contentStream.Close(); } } } // namespace System.Runtime.Remoting.Channels // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //========================================================================== // File: IpcClientManager.cs // // Summary: Class for managing a client pipe connection. // //========================================================================= using System; using System.Collections; using System.IO; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading; using System.Runtime.Remoting.Channels.Tcp; using System.Globalization; namespace System.Runtime.Remoting.Channels.Ipc { // A client manager instance should encapsulate the port // for the purpose of reading a response internal class IpcClientHandler : IpcServerHandler { private bool _bOneWayRequest = false; // was the request made OneWay? private TcpReadingStream _responseStream = null; private int _contentLength; private bool _bChunked; private IpcClientTransportSink _sink = null; internal IpcClientHandler(IpcPort port, Stream stream, IpcClientTransportSink sink) : base (port, null, stream) { _sink = sink; } internal Stream GetResponseStream() { _responseStream = new TcpFixedLengthReadingStream(this, _contentLength); return _responseStream; } public new BaseTransportHeaders ReadHeaders() { BaseTransportHeaders headers = new BaseTransportHeaders(); UInt16 operation; ReadVersionAndOperation(out operation); // At this point, we're always expecting a Reply, so check for that. if (operation != TcpOperations.Reply) { throw new RemotingException( String.Format( CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Tcp_ExpectingReplyOp"), operation.ToString(CultureInfo.CurrentCulture))); } // content length must come next (may be chunked or a specific length) ReadContentLength(out _bChunked, out _contentLength); // read to end of headers ReadToEndOfHeaders(headers); return headers; } // ReadHeaders public override void OnInputStreamClosed() { // make sure we read to the end of the response stream if (_responseStream != null) { _responseStream.ReadToEnd(); _responseStream = null; } // return socket to the cache ReturnToCache(); } // OnInputStreamClosed internal void ReturnToCache() { _sink.Cache.ReleaseConnection(_port); } internal void SendRequest(IMessage msg, ITransportHeaders headers, Stream contentStream) { // Request is written just like a response // we can reuse the same code IMethodCallMessage mcm = (IMethodCallMessage)msg; int contentLength = (int)contentStream.Length; String uri = mcm.Uri; _bOneWayRequest = RemotingServices.IsOneWay(mcm.MethodBase); ChunkedMemoryStream headerStream = new ChunkedMemoryStream(CoreChannel.BufferPool); // output preamble and version WritePreambleAndVersion(headerStream); // output opcode if (!_bOneWayRequest) WriteUInt16(TcpOperations.Request, headerStream); else WriteUInt16(TcpOperations.OneWayRequest, headerStream); // output content delimiter style WriteUInt16(TcpContentDelimiter.ContentLength, headerStream); WriteInt32(contentLength, headerStream); // output request uri WriteUInt16(TcpHeaders.RequestUri, headerStream); WriteByte(TcpHeaderFormat.CountedString, headerStream); WriteCountedString(uri, headerStream); // output rest of headers WriteHeaders(headers, headerStream); headerStream.WriteTo(NetStream); headerStream.Close(); StreamHelper.CopyStream(contentStream, NetStream); contentStream.Close(); } } } // 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
- ColorConvertedBitmapExtension.cs
- PhonemeConverter.cs
- SponsorHelper.cs
- HandlerFactoryWrapper.cs
- SerializationException.cs
- ApplicationProxyInternal.cs
- HtmlForm.cs
- SqlDataSourceQuery.cs
- XamlPointCollectionSerializer.cs
- ComboBoxItem.cs
- WinInet.cs
- Journaling.cs
- FilterFactory.cs
- FormsAuthentication.cs
- RijndaelManaged.cs
- SecurityTokenReferenceStyle.cs
- Literal.cs
- OdbcError.cs
- Overlapped.cs
- RelAssertionDirectKeyIdentifierClause.cs
- PeerApplication.cs
- PipelineModuleStepContainer.cs
- XmlIncludeAttribute.cs
- AuthenticationManager.cs
- TableAutomationPeer.cs
- SqlDependencyListener.cs
- GridViewUpdateEventArgs.cs
- SqlCommandSet.cs
- DataGridViewToolTip.cs
- CompatibleIComparer.cs
- PageThemeCodeDomTreeGenerator.cs
- ByteStorage.cs
- TableColumn.cs
- MethodImplAttribute.cs
- OdbcHandle.cs
- BoundPropertyEntry.cs
- VirtualPathUtility.cs
- TableLayout.cs
- NetSectionGroup.cs
- TypeLoadException.cs
- ChangeInterceptorAttribute.cs
- LazyTextWriterCreator.cs
- HtmlShimManager.cs
- TextServicesHost.cs
- FixedSOMTableCell.cs
- CircleEase.cs
- WebPartConnectionsDisconnectVerb.cs
- XmlSigningNodeWriter.cs
- Brush.cs
- GroupBoxRenderer.cs
- ObjectDataSourceMethodEventArgs.cs
- HtmlInputCheckBox.cs
- SafeNativeMethods.cs
- WebPartDisplayModeCancelEventArgs.cs
- LassoHelper.cs
- File.cs
- XmlValidatingReaderImpl.cs
- DbDataRecord.cs
- XmlSiteMapProvider.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- RectConverter.cs
- TextRange.cs
- SHA512.cs
- NameTable.cs
- DBNull.cs
- BoundsDrawingContextWalker.cs
- Base64Decoder.cs
- OrderPreservingMergeHelper.cs
- ACL.cs
- EntityContainerEntitySetDefiningQuery.cs
- ToolboxItemAttribute.cs
- AppAction.cs
- FormViewInsertEventArgs.cs
- SourceItem.cs
- TemplateComponentConnector.cs
- AssemblyHash.cs
- DocumentGridPage.cs
- ResXResourceSet.cs
- InstanceNormalEvent.cs
- XmlSchemaExporter.cs
- UpdateProgress.cs
- AuthenticationException.cs
- ServiceHostFactory.cs
- TemplateContainer.cs
- UniformGrid.cs
- HtmlInputHidden.cs
- BehaviorService.cs
- FormViewPageEventArgs.cs
- CharUnicodeInfo.cs
- ContentElement.cs
- TriggerActionCollection.cs
- MarginCollapsingState.cs
- ResourcePermissionBase.cs
- SurrogateChar.cs
- EnumType.cs
- Parsers.cs
- ViewUtilities.cs
- DictionarySectionHandler.cs
- ContractUtils.cs
- WebBodyFormatMessageProperty.cs