Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / LocalService / MessageQueueKey.cs / 1305376 / MessageQueueKey.cs
#pragma warning disable 1634, 1691
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------
using System;
using System.Text;
using System.Workflow.ComponentModel;
using System.Collections;
using System.Collections.Generic;
using System.Workflow.Runtime;
namespace System.Workflow.Activities
{
[Serializable]
public sealed class EventQueueName : IComparable
{
Type interfaceType;
string operation;
CorrelationProperty[] correlationValues;
string activityId;
[NonSerialized]
string assemblyQualifiedName;
[NonSerialized]
String stringifiedKey;
private string AssemblyQualifiedName
{
get
{
if (assemblyQualifiedName == null)
{
assemblyQualifiedName = this.interfaceType.AssemblyQualifiedName;
}
return assemblyQualifiedName;
}
}
public EventQueueName(Type interfaceType, string operation)
{
if (interfaceType == null)
throw new ArgumentNullException("interfaceType");
if (operation == null)
throw new ArgumentNullException("operation");
this.interfaceType = interfaceType;
this.operation = operation;
}
public EventQueueName(Type interfaceType, string operation, ICollection propertyValues)
: this(interfaceType, operation)
{
if (propertyValues != null)
{
this.correlationValues = new CorrelationProperty[propertyValues.Count];
propertyValues.CopyTo(this.correlationValues,0);
}
}
internal EventQueueName(Type interfaceType, string operation, string activityId)
: this(interfaceType, operation)
{
this.activityId = activityId;
}
// properties
public Type InterfaceType
{
get
{
return this.interfaceType;
}
}
public string MethodName
{
get
{
return this.operation;
}
}
public CorrelationProperty[] GetCorrelationValues()
{
return this.correlationValues;
}
public int CompareTo(Object toCompare)
{
if (toCompare is EventQueueName)
return this.CompareTo(toCompare as EventQueueName);
else
return -1;
}
// IComparable implementation
public int CompareTo(EventQueueName eventQueueName)
{
if (eventQueueName == null)
return -1;
// compare operation
int compared = StringComparer.Ordinal.Compare(this.MethodName, eventQueueName.MethodName);
if (compared == 0)
{
// compare type names
#pragma warning disable 56506
compared = StringComparer.Ordinal.Compare(AssemblyQualifiedName, eventQueueName.AssemblyQualifiedName); ;
#pragma warning restore 56506
if (compared == 0)
{
if (this.correlationValues != null)
{
compared = (eventQueueName.correlationValues != null) ? (this.correlationValues.Length - eventQueueName.correlationValues.Length) : -1;
if (compared == 0)
{
// compare correlation values
for (int i = 0; i < this.correlationValues.Length; i++)
{
if (this.correlationValues[i] == null || eventQueueName.correlationValues[i] == null)
{
compared = -1;
break; // match failed
}
object leftValue = this.correlationValues[i].Value;
object rightValue = FindCorrelationValue(this.correlationValues[i].Name, eventQueueName.correlationValues);
#pragma warning suppress 56506
if (leftValue == null && rightValue == null)
{
continue;
}
// do the explicit equals check
if (leftValue != null)
{
IComparable comparable = leftValue as IComparable;
if (comparable != null)
{
compared = comparable.CompareTo(rightValue);
if (compared != 0)
{
break; // match failed
}
}
else if ((!leftValue.Equals(rightValue)))
{
compared = -1;
break; // match failed
}
}
else
{
compared = -1;
break; // match failed
}
}
}
}
}
}
return compared;
}
public override bool Equals(object obj)
{
EventQueueName k = obj as EventQueueName;
//Without the cast we end up in op_Equality below
if ((object) k == null)
return false;
return 0 == CompareTo(k);
}
public static bool operator ==(EventQueueName queueKey1, EventQueueName queueKey2)
{
bool equality = false;
if ((object)queueKey1 != null)
{
if ((object)queueKey2 != null)
{
equality = (0 == queueKey1.CompareTo(queueKey2));
}
}
else if ((object)queueKey2 == null)
{
equality = true;
}
return equality;
}
public static bool operator !=(EventQueueName queueKey1, EventQueueName queueKey2)
{
return !(queueKey1 == queueKey2);
}
public static bool operator <(EventQueueName queueKey1, EventQueueName queueKey2)
{
if (queueKey1 == null)
throw new ArgumentNullException("queueKey1");
if (queueKey2 == null)
throw new ArgumentNullException("queueKey2");
return (queueKey1.CompareTo(queueKey2) < 0);
}
public static bool operator >(EventQueueName queueKey1, EventQueueName queueKey2)
{
if (queueKey1 == null)
throw new ArgumentNullException("queueKey1");
if (queueKey2 == null)
throw new ArgumentNullException("queueKey2");
return (queueKey1.CompareTo(queueKey2) > 0);
}
public override int GetHashCode()
{
if (String.IsNullOrEmpty(this.activityId))
return (AssemblyQualifiedName.GetHashCode() ^ this.operation.GetHashCode());
return (AssemblyQualifiedName.GetHashCode() ^ this.operation.GetHashCode() ^ this.activityId.GetHashCode()) ;
}
public override string ToString()
{
if (stringifiedKey == null)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("Message Properties");
stringBuilder.AppendLine("Interface Type:" + this.interfaceType.ToString());
stringBuilder.AppendLine("Method Name:" + this.operation.ToString());
stringBuilder.AppendLine("CorrelationValues:");
if (correlationValues != null)
{
foreach (CorrelationProperty pred in correlationValues)
{
if (pred != null && pred.Value != null)
stringBuilder.AppendLine(pred.Value.ToString());
}
}
stringifiedKey = stringBuilder.ToString();
}
return stringifiedKey;
}
object FindCorrelationValue(string name, CorrelationProperty[] correlationValues)
{
object value = null;
foreach (CorrelationProperty property in correlationValues)
{
if (property != null && property.Name == name)
{
value = property.Value;
break;
}
}
return value;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TabControlEvent.cs
- MinimizableAttributeTypeConverter.cs
- BitSet.cs
- RootProfilePropertySettingsCollection.cs
- SchemaCollectionPreprocessor.cs
- RelatedEnd.cs
- PrintPreviewGraphics.cs
- ClockController.cs
- CurrentTimeZone.cs
- HttpClientProtocol.cs
- Peer.cs
- DataSourceControl.cs
- XamlPointCollectionSerializer.cs
- SqlCommand.cs
- OleDbPropertySetGuid.cs
- UICuesEvent.cs
- CheckBoxAutomationPeer.cs
- Queue.cs
- FlagsAttribute.cs
- ChooseAction.cs
- FileDialog.cs
- NativeMethodsCLR.cs
- Int16AnimationUsingKeyFrames.cs
- UnknownWrapper.cs
- StateRuntime.cs
- TypeSystem.cs
- LocalIdKeyIdentifierClause.cs
- XmlSerializableWriter.cs
- BaseDataBoundControl.cs
- DbCommandDefinition.cs
- ContentTextAutomationPeer.cs
- CompositeCollectionView.cs
- MulticastIPAddressInformationCollection.cs
- CodePrimitiveExpression.cs
- FormViewInsertedEventArgs.cs
- KnownTypesHelper.cs
- MLangCodePageEncoding.cs
- ShortcutKeysEditor.cs
- JsonWriterDelegator.cs
- DbProviderFactories.cs
- InfoCardAsymmetricCrypto.cs
- RoamingStoreFileUtility.cs
- PowerModeChangedEventArgs.cs
- SqlClientMetaDataCollectionNames.cs
- CodeAccessSecurityEngine.cs
- InputLanguageEventArgs.cs
- ServiceObjectContainer.cs
- InstanceDescriptor.cs
- ControlAdapter.cs
- DateTimeSerializationSection.cs
- InkCanvasAutomationPeer.cs
- SpotLight.cs
- LocatorBase.cs
- DataViewManagerListItemTypeDescriptor.cs
- ValidationResult.cs
- ISSmlParser.cs
- MediaTimeline.cs
- DataGridViewBindingCompleteEventArgs.cs
- ServiceHostingEnvironment.cs
- AssemblyBuilder.cs
- WmlPhoneCallAdapter.cs
- EnumBuilder.cs
- DesignerPerfEventProvider.cs
- DataGridViewCellStateChangedEventArgs.cs
- WinHttpWebProxyFinder.cs
- EncryptedKeyIdentifierClause.cs
- ReferenceService.cs
- TabletDeviceInfo.cs
- TableStyle.cs
- SmiTypedGetterSetter.cs
- InkCanvasSelectionAdorner.cs
- ResourcePermissionBaseEntry.cs
- CaseInsensitiveHashCodeProvider.cs
- EpmSyndicationContentSerializer.cs
- StrongName.cs
- BlurEffect.cs
- XPathBuilder.cs
- SqlXmlStorage.cs
- FileUpload.cs
- TraceLevelStore.cs
- ProcessHostServerConfig.cs
- DynamicQueryableWrapper.cs
- ListItemCollection.cs
- PeerName.cs
- SqlUserDefinedTypeAttribute.cs
- ZipIOFileItemStream.cs
- ContextMenu.cs
- CqlGenerator.cs
- IncrementalHitTester.cs
- Column.cs
- FontFamily.cs
- ConfigurationManagerInternalFactory.cs
- HtmlAnchor.cs
- FormatterConverter.cs
- ValidationErrorCollection.cs
- safemediahandle.cs
- CommonProperties.cs
- SqlDelegatedTransaction.cs
- StatusStrip.cs
- X509ChainElement.cs