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
- DataPagerFieldItem.cs
- MemberProjectionIndex.cs
- InternalRelationshipCollection.cs
- NavigationHelper.cs
- DataServiceContext.cs
- FamilyMap.cs
- Odbc32.cs
- GlyphShapingProperties.cs
- MenuItemBindingCollection.cs
- SRGSCompiler.cs
- WebPartAuthorizationEventArgs.cs
- GlyphRunDrawing.cs
- XmlAttribute.cs
- __Error.cs
- FunctionDescription.cs
- DataGridRow.cs
- SeekableReadStream.cs
- CommonXSendMessage.cs
- SelectorAutomationPeer.cs
- SqlGenericUtil.cs
- WindowsEditBoxRange.cs
- VirtualizedContainerService.cs
- NativeMethods.cs
- ProviderConnectionPoint.cs
- PixelShader.cs
- ContentIterators.cs
- CalendarAutomationPeer.cs
- DataStreamFromComStream.cs
- DesignColumn.cs
- HotCommands.cs
- SEHException.cs
- ListenerElementsCollection.cs
- EncryptedType.cs
- StructuralType.cs
- TrackingMemoryStream.cs
- EventItfInfo.cs
- DataControlCommands.cs
- AutomationPropertyInfo.cs
- EmptyStringExpandableObjectConverter.cs
- PasswordDeriveBytes.cs
- TemplateNameScope.cs
- PropertyChangedEventManager.cs
- GiveFeedbackEventArgs.cs
- CompiledIdentityConstraint.cs
- infer.cs
- CacheEntry.cs
- IISMapPath.cs
- QilDataSource.cs
- CriticalFinalizerObject.cs
- BasicCellRelation.cs
- SvcMapFileSerializer.cs
- XXXInfos.cs
- ControlPaint.cs
- CompModSwitches.cs
- ToggleButtonAutomationPeer.cs
- BigInt.cs
- NetSectionGroup.cs
- TreeChangeInfo.cs
- DataGridViewCellParsingEventArgs.cs
- VirtualPathData.cs
- filewebresponse.cs
- StrokeRenderer.cs
- ICollection.cs
- PerformanceCounterScope.cs
- DesignerActionItem.cs
- CorrelationToken.cs
- EdmComplexTypeAttribute.cs
- ChameleonKey.cs
- MasterPageCodeDomTreeGenerator.cs
- MatrixValueSerializer.cs
- TreeNodeConverter.cs
- DataTableCollection.cs
- GenericXmlSecurityToken.cs
- BigInt.cs
- DataServiceRequestArgs.cs
- Transform3D.cs
- Attributes.cs
- TransformerConfigurationWizardBase.cs
- TransactionManagerProxy.cs
- RegexCode.cs
- loginstatus.cs
- ConnectionPointGlyph.cs
- XmlSchemaImporter.cs
- BitmapEffectDrawing.cs
- SqlBulkCopy.cs
- QilTernary.cs
- WindowHideOrCloseTracker.cs
- XmlAutoDetectWriter.cs
- DeviceContext.cs
- MbpInfo.cs
- ZipIOModeEnforcingStream.cs
- EmptyEnumerator.cs
- PersonalizationDictionary.cs
- XamlBrushSerializer.cs
- FilterElement.cs
- InsufficientMemoryException.cs
- TransformerConfigurationWizardBase.cs
- Graph.cs
- VisualTransition.cs
- AppDomainUnloadedException.cs