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
- odbcmetadatafactory.cs
- WorkflowApplicationTerminatedException.cs
- CollaborationHelperFunctions.cs
- SetterBase.cs
- TextTrailingWordEllipsis.cs
- HostProtectionPermission.cs
- ControlCachePolicy.cs
- DbModificationClause.cs
- DrawingBrush.cs
- util.cs
- DSACryptoServiceProvider.cs
- Latin1Encoding.cs
- MasterPageParser.cs
- VirtualizedCellInfoCollection.cs
- EntityDataSourceColumn.cs
- TransformConverter.cs
- ToolStripContentPanel.cs
- FontFamily.cs
- PeerCollaboration.cs
- MenuItemStyleCollection.cs
- ToolStripTemplateNode.cs
- SqlMethodCallConverter.cs
- TimeZoneInfo.cs
- Transform3D.cs
- UdpMessageProperty.cs
- EmptyQuery.cs
- isolationinterop.cs
- PathNode.cs
- VariableBinder.cs
- OutputCacheSettings.cs
- BrowsableAttribute.cs
- ExpressionBuilder.cs
- QueryStack.cs
- XmlSchemaRedefine.cs
- WCFServiceClientProxyGenerator.cs
- WindowsFormsHelpers.cs
- SplineKeyFrames.cs
- ConfigurationStrings.cs
- LassoHelper.cs
- XmlWellformedWriter.cs
- BodyWriter.cs
- WinFormsSecurity.cs
- SecurityManager.cs
- TerminatorSinks.cs
- IItemProperties.cs
- ExpandableObjectConverter.cs
- InvalidPrinterException.cs
- MappingMetadataHelper.cs
- ProcessModelInfo.cs
- LocatorPart.cs
- AuthStoreRoleProvider.cs
- Renderer.cs
- CLSCompliantAttribute.cs
- ProcessHost.cs
- RelationshipEndCollection.cs
- XmlCustomFormatter.cs
- ping.cs
- DataRow.cs
- DataServiceHostWrapper.cs
- WinEventQueueItem.cs
- PersistenceTypeAttribute.cs
- ExpressionPrefixAttribute.cs
- XmlDataProvider.cs
- AnnotationComponentManager.cs
- ConcurrentStack.cs
- HandlerBase.cs
- DocumentReference.cs
- CodeGenerator.cs
- LocalFileSettingsProvider.cs
- IndexedWhereQueryOperator.cs
- BaseHashHelper.cs
- GridPattern.cs
- DataSourceControl.cs
- CodeIdentifier.cs
- XPathEmptyIterator.cs
- BulletedListEventArgs.cs
- PowerModeChangedEventArgs.cs
- PrivateFontCollection.cs
- DrawingBrush.cs
- ObjectView.cs
- EditorReuseAttribute.cs
- Polyline.cs
- TrackingRecordPreFilter.cs
- PropertyCollection.cs
- CryptoApi.cs
- BookmarkUndoUnit.cs
- NotFiniteNumberException.cs
- ReflectTypeDescriptionProvider.cs
- SrgsRule.cs
- CompilerError.cs
- DataGridBoolColumn.cs
- DragStartedEventArgs.cs
- SafeArchiveContext.cs
- AuthenticationSection.cs
- HtmlShim.cs
- CodeParameterDeclarationExpressionCollection.cs
- XmlDataLoader.cs
- FacetValueContainer.cs
- RegexParser.cs
- TypedReference.cs