Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Messaging / System / Messaging / QueueAccessMode.cs / 1305376 / QueueAccessMode.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Messaging { using System.Diagnostics; using System; using System.Collections.Generic; using System.Messaging.Interop; ////// /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")] public enum QueueAccessMode { Send = NativeMethods.QUEUE_ACCESS_SEND, Peek = NativeMethods.QUEUE_ACCESS_PEEK, Receive = NativeMethods.QUEUE_ACCESS_RECEIVE, PeekAndAdmin = NativeMethods.QUEUE_ACCESS_PEEK | NativeMethods.QUEUE_ACCESS_ADMIN, ReceiveAndAdmin = NativeMethods.QUEUE_ACCESS_RECEIVE | NativeMethods.QUEUE_ACCESS_ADMIN, /// /// SendAndReceive is supported for compatibility only. /// SendAndReceive = NativeMethods.QUEUE_ACCESS_SEND | NativeMethods.QUEUE_ACCESS_RECEIVE, } internal class QueueAccessModeHolder { private QueueAccessMode accessMode; private static Dictionary/// Specifies what operations can be performed on the queue. /// ///holders = new Dictionary () ; private QueueAccessModeHolder(QueueAccessMode accessMode) { this.accessMode = accessMode; } /// /// public static QueueAccessModeHolder GetQueueAccessModeHolder(QueueAccessMode accessMode) { if (holders.ContainsKey(accessMode)) { return holders[accessMode]; } lock (holders) { QueueAccessModeHolder newHolder = new QueueAccessModeHolder(accessMode); holders[accessMode] = newHolder; return newHolder; } } public bool CanRead() { return (((accessMode & QueueAccessMode.Receive) != 0) || ((accessMode & QueueAccessMode.Peek) != 0)); } public bool CanWrite() { return ((accessMode & QueueAccessMode.Send) != 0); } public int GetReadAccessMode() { int result = (int)(accessMode & ~QueueAccessMode.Send); if (result != 0) return result; // this is fail-fast path, when we know right away that the operation is incompatible with access mode // AccessDenied can also happen in other cases, // (for example, when we try to receive on a queue opened only for peek. // We'll let MQReceiveMessage enforce these rules throw new MessageQueueException((int)MessageQueueErrorCode.AccessDenied); } public int GetWriteAccessMode() { int result = (int)(accessMode & QueueAccessMode.Send); if (result != 0) return result; // this is fail-fast path, when we know right away that the operation is incompatible with access mode // AccessDenied can also happen in other cases, // (for example, when we try to receive on a queue opened only for peek. // We'll let MQReceiveMessage enforce these rules throw new MessageQueueException((int)MessageQueueErrorCode.AccessDenied); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ ///// Factory method for getting a QueueAccessModeHolder holder. For each accessMode, we want only one holder. /// ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Messaging { using System.Diagnostics; using System; using System.Collections.Generic; using System.Messaging.Interop; ////// /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1008:EnumsShouldHaveZeroValue")] public enum QueueAccessMode { Send = NativeMethods.QUEUE_ACCESS_SEND, Peek = NativeMethods.QUEUE_ACCESS_PEEK, Receive = NativeMethods.QUEUE_ACCESS_RECEIVE, PeekAndAdmin = NativeMethods.QUEUE_ACCESS_PEEK | NativeMethods.QUEUE_ACCESS_ADMIN, ReceiveAndAdmin = NativeMethods.QUEUE_ACCESS_RECEIVE | NativeMethods.QUEUE_ACCESS_ADMIN, /// /// SendAndReceive is supported for compatibility only. /// SendAndReceive = NativeMethods.QUEUE_ACCESS_SEND | NativeMethods.QUEUE_ACCESS_RECEIVE, } internal class QueueAccessModeHolder { private QueueAccessMode accessMode; private static Dictionary/// Specifies what operations can be performed on the queue. /// ///holders = new Dictionary () ; private QueueAccessModeHolder(QueueAccessMode accessMode) { this.accessMode = accessMode; } /// /// public static QueueAccessModeHolder GetQueueAccessModeHolder(QueueAccessMode accessMode) { if (holders.ContainsKey(accessMode)) { return holders[accessMode]; } lock (holders) { QueueAccessModeHolder newHolder = new QueueAccessModeHolder(accessMode); holders[accessMode] = newHolder; return newHolder; } } public bool CanRead() { return (((accessMode & QueueAccessMode.Receive) != 0) || ((accessMode & QueueAccessMode.Peek) != 0)); } public bool CanWrite() { return ((accessMode & QueueAccessMode.Send) != 0); } public int GetReadAccessMode() { int result = (int)(accessMode & ~QueueAccessMode.Send); if (result != 0) return result; // this is fail-fast path, when we know right away that the operation is incompatible with access mode // AccessDenied can also happen in other cases, // (for example, when we try to receive on a queue opened only for peek. // We'll let MQReceiveMessage enforce these rules throw new MessageQueueException((int)MessageQueueErrorCode.AccessDenied); } public int GetWriteAccessMode() { int result = (int)(accessMode & QueueAccessMode.Send); if (result != 0) return result; // this is fail-fast path, when we know right away that the operation is incompatible with access mode // AccessDenied can also happen in other cases, // (for example, when we try to receive on a queue opened only for peek. // We'll let MQReceiveMessage enforce these rules throw new MessageQueueException((int)MessageQueueErrorCode.AccessDenied); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007./// Factory method for getting a QueueAccessModeHolder holder. For each accessMode, we want only one holder. /// ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AttributedMetaModel.cs
- CannotUnloadAppDomainException.cs
- GridViewAutomationPeer.cs
- RootBrowserWindow.cs
- StringFunctions.cs
- FramingFormat.cs
- TripleDES.cs
- Panel.cs
- Page.cs
- DebuggerAttributes.cs
- PathGeometry.cs
- XmlParserContext.cs
- DataKeyCollection.cs
- InkCanvasSelection.cs
- SymbolEqualComparer.cs
- CheckBoxBaseAdapter.cs
- RectangleConverter.cs
- SingleAnimationBase.cs
- NamespaceCollection.cs
- XmlUtil.cs
- TextWriterEngine.cs
- IDispatchConstantAttribute.cs
- Or.cs
- ByteStorage.cs
- PenLineCapValidation.cs
- ComponentTray.cs
- UpdatePanel.cs
- figurelengthconverter.cs
- documentsequencetextpointer.cs
- OleDbConnection.cs
- NavigationPropertySingletonExpression.cs
- CapiHashAlgorithm.cs
- DocumentsTrace.cs
- MetabaseReader.cs
- WebPartConnectionsConnectVerb.cs
- CharacterHit.cs
- JobCollate.cs
- MSAAEventDispatcher.cs
- BrowserCapabilitiesFactory.cs
- TextRangeEdit.cs
- ErrorsHelper.cs
- ProtocolsConfiguration.cs
- ControlHelper.cs
- _Semaphore.cs
- ObjectSecurity.cs
- CommonDialog.cs
- SingleConverter.cs
- ISFTagAndGuidCache.cs
- ListViewGroupConverter.cs
- UIElement3D.cs
- QueryOperatorEnumerator.cs
- ClientConfigurationHost.cs
- SqlWorkflowPersistenceService.cs
- TransformConverter.cs
- FrugalList.cs
- SQLBinaryStorage.cs
- HitTestParameters3D.cs
- DesignConnection.cs
- FontFamily.cs
- TextPointerBase.cs
- StaticExtension.cs
- UtilityExtension.cs
- _HeaderInfo.cs
- SoapFormatterSinks.cs
- QilTypeChecker.cs
- Parameter.cs
- TreeNodeClickEventArgs.cs
- DataViewSetting.cs
- ExpressionVisitorHelpers.cs
- IChannel.cs
- ElementHostAutomationPeer.cs
- TypedServiceChannelBuilder.cs
- XmlBaseWriter.cs
- XmlEntityReference.cs
- ProcessHost.cs
- KoreanCalendar.cs
- ListView.cs
- Matrix3DStack.cs
- BindingElementCollection.cs
- UshortList2.cs
- OracleColumn.cs
- CommandEventArgs.cs
- ScrollChrome.cs
- FixedFindEngine.cs
- GlobalAllocSafeHandle.cs
- DuplexChannelFactory.cs
- UnknownMessageReceivedEventArgs.cs
- EffectiveValueEntry.cs
- DiagnosticsConfigurationHandler.cs
- ExpandableObjectConverter.cs
- GeneralTransform3DGroup.cs
- SmtpException.cs
- SByte.cs
- AnnotationHighlightLayer.cs
- ObjectQueryProvider.cs
- ConstructorBuilder.cs
- SourceItem.cs
- StrokeFIndices.cs
- WebPartConnectionsCancelVerb.cs
- OletxVolatileEnlistment.cs