//------------------------------------------------------------------------------------------------------------------------ #endregion #region Constructors //------------------------------------------------------------------------------------------------------------------------ static TypeCache() { #if NETFX //add entry assembly var EntryAssembly = Assembly.GetEntryAssembly(); if (EntryAssembly != null) { EntryAssemblies.Add(EntryAssembly); } //Add as many assemblies as we can //add from stack try { var frameAssemblies = new System.Diagnostics.StackTrace().GetFrames().Select(t => t.GetMethod().Module.Assembly).ToHashSet(); foreach (var entry in frameAssemblies) { EntryAssemblies.Add(entry); } } catch (Exception ex) { DebugEx.TraceError(ex, "Unhandled exception during Stack Frame assembly examination"); } //add from domain try { EntryAssemblies.AddFromSource(AppDomain.CurrentDomain.GetAssemblies()); } catch (Exception ex) { DebugEx.TraceError(ex, "Unhandled exception during AppDomain assembly examination"); } #elif UNIVERSAL EntryAssemblies.Add(Windows.UI.Xaml.Application.Current.GetType().GetTypeInfo().Assembly); #endif }
//------------------------------------------------------------------------------------------------------------------------ void _recAdd(string[] elements, TKey key, int index) { //check if (elements == null || elements.Length == 0) { return; } //check if index is last element if (index >= elements.Length) { //add to keys Keys.Add(key); } else if (index == elements.Length - 1 && (elements[index] == "#" || elements[index] == "+")) { //add to promiscious keys PromiscuousKeys.Add(key); } else { //add on proper list MqttTopicNode <TKey> node; lock (Children) { node = Children.TryGetOrDefault(elements[index]); if (node == null) { Children.Add(elements[index], node = new MqttTopicNode <TKey>() { ParentNode = this, TopicNodeId = elements[index] }); } } //continue recursion node._recAdd(elements, key, index + 1); } }