private bool TryCacheLookup(BaseUriWithWildcard key, out TItem item)
        {
            object value = this.lookupCache.GetValue(this.ThisLock, key);

            item = (value == DBNull.Value ? default(TItem) : (TItem)value);
            return(value != null);
        }
Пример #2
0
        private BaseUriWithWildcard(string protocol, int defaultPort, string binding, int segmentCount, string path, string sampleBinding)
        {
            string[] strArrays = BaseUriWithWildcard.SplitBinding(binding);
            if ((int)strArrays.Length != segmentCount)
            {
                ExceptionUtility exceptionUtility           = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility;
                string           hostingMisformattedBinding = Resources.Hosting_MisformattedBinding;
                object[]         objArray = new object[] { binding, protocol, sampleBinding };
                throw exceptionUtility.ThrowHelperError(new UriFormatException(Microsoft.ServiceBus.SR.GetString(hostingMisformattedBinding, objArray)));
            }
            int    num  = segmentCount - 1;
            string str  = this.ParseHostAndHostNameComparisonMode(strArrays[num]);
            int    num1 = -1;
            int    num2 = num - 1;

            num = num2;
            if (num2 >= 0)
            {
                string str1 = strArrays[num].Trim();
                if (!string.IsNullOrEmpty(str1) && !int.TryParse(str1, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out num1))
                {
                    ExceptionUtility exceptionUtility1       = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility;
                    string           hostingMisformattedPort = Resources.Hosting_MisformattedPort;
                    object[]         objArray1 = new object[] { protocol, binding, str1 };
                    throw exceptionUtility1.ThrowHelperError(new UriFormatException(Microsoft.ServiceBus.SR.GetString(hostingMisformattedPort, objArray1)));
                }
                if (num1 == defaultPort)
                {
                    num1 = -1;
                }
            }
            try
            {
                this.baseAddress = (new UriBuilder(protocol, str, num1, path)).Uri;
            }
            catch (Exception exception1)
            {
                Exception exception = exception1;
                if (!Fx.IsFatal(exception))
                {
                    if (Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ShouldTraceError)
                    {
                        Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Error);
                    }
                    ExceptionUtility exceptionUtility2 = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility;
                    string           hostingMisformattedBindingData = Resources.Hosting_MisformattedBindingData;
                    object[]         objArray2 = new object[] { binding, protocol };
                    throw exceptionUtility2.ThrowHelperError(new UriFormatException(Microsoft.ServiceBus.SR.GetString(hostingMisformattedBindingData, objArray2)));
                }
                throw;
            }
            this.SetComparisonAddressAndHashCode();
        }
Пример #3
0
        public override bool Equals(object o)
        {
            BaseUriWithWildcard baseUriWithWildcard = o as BaseUriWithWildcard;

            if (baseUriWithWildcard == null || baseUriWithWildcard.hashCode != this.hashCode || baseUriWithWildcard.hostNameComparisonMode != this.hostNameComparisonMode || baseUriWithWildcard.comparand.Port != this.comparand.Port)
            {
                return(false);
            }
            if (!object.ReferenceEquals(baseUriWithWildcard.comparand.Scheme, this.comparand.Scheme))
            {
                return(false);
            }
            return(this.comparand.Address.Equals(baseUriWithWildcard.comparand.Address));
        }
Пример #4
0
 public void SetData(TData data, BaseUriWithWildcard path)
 {
     this.path = path;
     if (!this.useWeakReferences)
     {
         this.data = data;
         return;
     }
     if (data == null)
     {
         this.weakData = null;
         return;
     }
     this.weakData = new WeakReference((object)data);
 }
        private void AddToCache(BaseUriWithWildcard key, TItem item)
        {
            object              value;
            HopperCache         hopperCache         = this.lookupCache;
            BaseUriWithWildcard baseUriWithWildcard = key;
            TItem tItem = item;

            if (tItem != null)
            {
                value = tItem;
            }
            else
            {
                value = DBNull.Value;
            }
            hopperCache.Add(baseUriWithWildcard, value);
        }
        public bool IsRegistered(BaseUriWithWildcard key)
        {
            bool flag;
            SegmentHierarchyNode <TItem> segmentHierarchyNode;
            Uri baseAddress = key.BaseAddress;

            string[] path = UriPrefixTable <TItem> .UriSegmenter.ToPath(baseAddress, key.HostNameComparisonMode, this.includePortInComparison);

            lock (this.ThisLock)
            {
                segmentHierarchyNode = this.FindDataNode(path, out flag);
            }
            if (!flag || segmentHierarchyNode == null)
            {
                return(false);
            }
            return(segmentHierarchyNode.Data != null);
        }
 public void RegisterUri(Uri uri, HostNameComparisonMode hostNameComparisonMode, TItem item)
 {
     lock (this.ThisLock)
     {
         this.ClearCache();
         BaseUriWithWildcard          baseUriWithWildcard  = new BaseUriWithWildcard(uri, hostNameComparisonMode);
         SegmentHierarchyNode <TItem> segmentHierarchyNode = this.FindOrCreateNode(baseUriWithWildcard);
         if (segmentHierarchyNode.Data != null)
         {
             ExceptionUtility exceptionUtility      = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility;
             string           duplicateRegistration = Resources.DuplicateRegistration;
             object[]         objArray = new object[] { uri };
             throw exceptionUtility.ThrowHelperError(new InvalidOperationException(Microsoft.ServiceBus.SR.GetString(duplicateRegistration, objArray)));
         }
         segmentHierarchyNode.SetData(item, baseUriWithWildcard);
         UriPrefixTable <TItem> uriPrefixTable = this;
         uriPrefixTable.count = uriPrefixTable.count + 1;
     }
 }
        private SegmentHierarchyNode <TItem> FindOrCreateNode(BaseUriWithWildcard baseUri)
        {
            SegmentHierarchyNode <TItem> segmentHierarchyNode;

            string[] path = UriPrefixTable <TItem> .UriSegmenter.ToPath(baseUri.BaseAddress, baseUri.HostNameComparisonMode, this.includePortInComparison);

            SegmentHierarchyNode <TItem> segmentHierarchyNode1 = this.root;

            for (int i = 0; i < (int)path.Length; i++)
            {
                if (!segmentHierarchyNode1.TryGetChild(path[i], out segmentHierarchyNode))
                {
                    segmentHierarchyNode = new SegmentHierarchyNode <TItem>(path[i], this.useWeakReferences);
                    segmentHierarchyNode1.SetChildNode(path[i], segmentHierarchyNode);
                }
                segmentHierarchyNode1 = segmentHierarchyNode;
            }
            return(segmentHierarchyNode1);
        }
        public bool TryLookupUri(Uri uri, HostNameComparisonMode hostNameComparisonMode, out TItem item)
        {
            bool flag;
            bool flag1;
            BaseUriWithWildcard baseUriWithWildcard = new BaseUriWithWildcard(uri, hostNameComparisonMode);

            if (this.TryCacheLookup(baseUriWithWildcard, out item))
            {
                return(item != null);
            }
            lock (this.ThisLock)
            {
                SegmentHierarchyNode <TItem> segmentHierarchyNode = this.FindDataNode(UriPrefixTable <TItem> .UriSegmenter.ToPath(baseUriWithWildcard.BaseAddress, hostNameComparisonMode, this.includePortInComparison), out flag);
                if (segmentHierarchyNode != null)
                {
                    item = segmentHierarchyNode.Data;
                }
                this.AddToCache(baseUriWithWildcard, item);
                flag1 = item != null;
            }
            return(flag1);
        }