Code:
/ 4.0 / 4.0 / untmp / 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;
///
///
///
/// Specifies what operations can be performed on the queue.
///
///
[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 holders = new Dictionary() ;
private QueueAccessModeHolder(QueueAccessMode accessMode) {
this.accessMode = accessMode;
}
///
///
/// Factory method for getting a QueueAccessModeHolder holder. For each accessMode, we want only one holder.
///
///
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Point3DAnimationBase.cs
- DrawingCollection.cs
- MethodBuilder.cs
- DesignTimeParseData.cs
- CrossContextChannel.cs
- LinqDataSourceDisposeEventArgs.cs
- UnsafeNativeMethods.cs
- Keyboard.cs
- ClientSponsor.cs
- NativeWindow.cs
- WebHttpBindingCollectionElement.cs
- KnownTypes.cs
- OleCmdHelper.cs
- SafeProcessHandle.cs
- AddInProcess.cs
- NamespaceEmitter.cs
- ImageListImage.cs
- LeaseManager.cs
- SystemParameters.cs
- AssertFilter.cs
- StylusDevice.cs
- BitmapVisualManager.cs
- PDBReader.cs
- EdmScalarPropertyAttribute.cs
- TextPattern.cs
- DbResourceAllocator.cs
- RelationshipConverter.cs
- SafeNativeMethods.cs
- EditorOptionAttribute.cs
- IntegerValidator.cs
- ReadWriteControlDesigner.cs
- TreeNodeSelectionProcessor.cs
- DetailsViewRowCollection.cs
- TreeNodeStyle.cs
- XmlHierarchicalDataSourceView.cs
- CounterSample.cs
- DataRowChangeEvent.cs
- DataGridViewBindingCompleteEventArgs.cs
- ObjectDataSourceView.cs
- PanelStyle.cs
- AtomPub10ServiceDocumentFormatter.cs
- TableAutomationPeer.cs
- OdbcParameterCollection.cs
- LoginName.cs
- ImpersonationContext.cs
- PersonalizationDictionary.cs
- DataColumn.cs
- RequiredAttributeAttribute.cs
- XmlUtil.cs
- FacetDescriptionElement.cs
- MissingManifestResourceException.cs
- BamlReader.cs
- CheckedListBox.cs
- OLEDB_Enum.cs
- X509ScopedServiceCertificateElementCollection.cs
- View.cs
- ContextQuery.cs
- PeerToPeerException.cs
- MessageBox.cs
- ResourceDisplayNameAttribute.cs
- OutputCacheProfileCollection.cs
- SystemIcmpV4Statistics.cs
- WindowsListView.cs
- Pen.cs
- Selector.cs
- ChangesetResponse.cs
- HttpHostedTransportConfiguration.cs
- EdmSchemaAttribute.cs
- TransformerInfo.cs
- AsyncOperationManager.cs
- TrustManager.cs
- ManagedFilter.cs
- ResizeGrip.cs
- UserCancellationException.cs
- activationcontext.cs
- StreamWithDictionary.cs
- PenLineCapValidation.cs
- ArgIterator.cs
- NamedObject.cs
- SetStateDesigner.cs
- ObjectItemAssemblyLoader.cs
- WebPartEventArgs.cs
- ApplicationInfo.cs
- WebPartConnectionsCloseVerb.cs
- LogicalExpr.cs
- PropertyOverridesTypeEditor.cs
- RSAOAEPKeyExchangeFormatter.cs
- ADMembershipProvider.cs
- EarlyBoundInfo.cs
- AddInProcess.cs
- SchemaImporterExtension.cs
- DataRowView.cs
- TargetConverter.cs
- DocumentScope.cs
- LinkUtilities.cs
- ListSortDescriptionCollection.cs
- RMEnrollmentPage3.cs
- ManipulationDevice.cs
- XmlReader.cs
- Resources.Designer.cs