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
- SparseMemoryStream.cs
- BulletedList.cs
- RecognizedPhrase.cs
- DataGridViewToolTip.cs
- TransportationConfigurationTypeInstallComponent.cs
- CodeDomExtensionMethods.cs
- AttributeAction.cs
- TemplateColumn.cs
- PersonalizableAttribute.cs
- DecimalAnimation.cs
- ContextMarshalException.cs
- FileReservationCollection.cs
- PnrpPermission.cs
- _ConnectOverlappedAsyncResult.cs
- QueryMatcher.cs
- LoginName.cs
- EllipseGeometry.cs
- XmlDownloadManager.cs
- TextControl.cs
- CodeTypeOfExpression.cs
- ObjectConverter.cs
- GPStream.cs
- ReceiveActivityValidator.cs
- PageBuildProvider.cs
- OutputScopeManager.cs
- RSAPKCS1KeyExchangeFormatter.cs
- IndexingContentUnit.cs
- XmlDocumentType.cs
- VectorCollectionConverter.cs
- DataGridCaption.cs
- SQLInt32Storage.cs
- TransactionValidationBehavior.cs
- WebPartEditorApplyVerb.cs
- QueryCacheManager.cs
- DataRowView.cs
- TextStore.cs
- DesignTimeXamlWriter.cs
- FocusChangedEventArgs.cs
- MimeAnyImporter.cs
- ImageSourceConverter.cs
- MD5.cs
- XmlHierarchyData.cs
- KeyInterop.cs
- DrawListViewItemEventArgs.cs
- LocalizabilityAttribute.cs
- TextEditorThreadLocalStore.cs
- HtmlValidatorAdapter.cs
- TransformValueSerializer.cs
- ChooseAction.cs
- XmlNodeComparer.cs
- _ChunkParse.cs
- DataGridViewTopRowAccessibleObject.cs
- HitTestWithGeometryDrawingContextWalker.cs
- SqlReferenceCollection.cs
- TraceEventCache.cs
- Matrix3D.cs
- HttpCacheVary.cs
- SatelliteContractVersionAttribute.cs
- Funcletizer.cs
- TypedTableBaseExtensions.cs
- MessageBox.cs
- VisualBrush.cs
- IISUnsafeMethods.cs
- BufferModeSettings.cs
- BlurBitmapEffect.cs
- PathSegmentCollection.cs
- SafeThemeHandle.cs
- ElementAction.cs
- TemplateControl.cs
- DateBoldEvent.cs
- ListControlDataBindingHandler.cs
- InputScopeAttribute.cs
- TypeInfo.cs
- Solver.cs
- FormsAuthenticationUserCollection.cs
- cache.cs
- OleDbDataAdapter.cs
- RootBrowserWindow.cs
- DesignerForm.cs
- TrackPoint.cs
- CompileLiteralTextParser.cs
- DateTimeUtil.cs
- CompositeDataBoundControl.cs
- ExecutionEngineException.cs
- JoinTreeNode.cs
- SelectionEditor.cs
- WrapPanel.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- TreeBuilderBamlTranslator.cs
- SineEase.cs
- Resources.Designer.cs
- Compress.cs
- UIElement.cs
- VectorCollectionConverter.cs
- DesignerCalendarAdapter.cs
- TimeSpanStorage.cs
- XmlComplianceUtil.cs
- COM2ExtendedTypeConverter.cs
- FileLevelControlBuilderAttribute.cs
- MetadataArtifactLoaderComposite.cs