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
- SpotLight.cs
- CatalogPartChrome.cs
- IdnMapping.cs
- Rule.cs
- InkCanvasSelectionAdorner.cs
- HostProtectionException.cs
- PackagePartCollection.cs
- SafeUserTokenHandle.cs
- XamlTreeBuilderBamlRecordWriter.cs
- DispatcherTimer.cs
- ListViewGroup.cs
- assemblycache.cs
- StatusBarPanel.cs
- StringFreezingAttribute.cs
- ExtendedPropertiesHandler.cs
- ColorMatrix.cs
- HasCopySemanticsAttribute.cs
- AssemblyAssociatedContentFileAttribute.cs
- XmlSchemaObject.cs
- FileAuthorizationModule.cs
- Style.cs
- GifBitmapEncoder.cs
- PermissionRequestEvidence.cs
- PlainXmlDeserializer.cs
- CatalogZoneBase.cs
- SqlMetaData.cs
- DocComment.cs
- SrgsElement.cs
- Tuple.cs
- ExchangeUtilities.cs
- AnimationLayer.cs
- DataTableCollection.cs
- TextModifier.cs
- RemoteEndpointMessageProperty.cs
- DBCSCodePageEncoding.cs
- Control.cs
- DynamicFilterExpression.cs
- NavigationPropertyEmitter.cs
- FamilyMapCollection.cs
- DesignTimeType.cs
- ImageAnimator.cs
- BridgeDataRecord.cs
- ObjectViewListener.cs
- SystemNetworkInterface.cs
- MouseGesture.cs
- TagElement.cs
- AncestorChangedEventArgs.cs
- XmlQuerySequence.cs
- LineServicesRun.cs
- IndicCharClassifier.cs
- TreeNodeCollectionEditorDialog.cs
- ProfileSettings.cs
- BrushValueSerializer.cs
- ConnectivityStatus.cs
- TextBoxView.cs
- DateTimeUtil.cs
- PrivilegeNotHeldException.cs
- LicenseProviderAttribute.cs
- EntityContainerEmitter.cs
- SQLMoney.cs
- BindToObject.cs
- BinaryFormatterWriter.cs
- ClientConfigPaths.cs
- IntPtr.cs
- MetadataProperty.cs
- PreProcessInputEventArgs.cs
- NativeMethodsCLR.cs
- SqlConnectionPoolProviderInfo.cs
- ConnectionProviderAttribute.cs
- TaskFileService.cs
- ListItemCollection.cs
- Transaction.cs
- ToolStripContentPanelRenderEventArgs.cs
- AnimationTimeline.cs
- NullableDecimalAverageAggregationOperator.cs
- IntegrationExceptionEventArgs.cs
- TextDecoration.cs
- HtmlShim.cs
- StringUtil.cs
- VirtualizingStackPanel.cs
- _ConnectStream.cs
- TextParagraphView.cs
- TagNameToTypeMapper.cs
- PopupControlService.cs
- Transform3DGroup.cs
- RowParagraph.cs
- UnsafeMethods.cs
- DNS.cs
- PhysicalFontFamily.cs
- EncryptedKey.cs
- XmlUnspecifiedAttribute.cs
- DynamicPropertyReader.cs
- JsonClassDataContract.cs
- DebugView.cs
- NullableLongAverageAggregationOperator.cs
- nulltextnavigator.cs
- XmlSchemaSimpleContent.cs
- HttpListenerPrefixCollection.cs
- WizardStepBase.cs
- CacheVirtualItemsEvent.cs