Пример #1
0
        //------------------------------------------------------------------------------------------------------------------------
        bool _recRemove(string[] elements, TKey key, int index)
        {
            //check
            if (elements == null || elements.Length == 0)
            {
                return(false);
            }

            //check if index is last element
            bool removed = false;

            if (index >= elements.Length)
            {
                //add to keys
                Keys.Remove(key);
                //remove me from parent
                if (Keys.Count == 0)
                {
                    lock (Children)
                    {
                        var me = ParentNode.Children.TryGetOrDefault(TopicNodeId);
                        if (this == me)
                        {
                            ParentNode.Children.Remove(TopicNodeId);
                        }
                    }
                }
            }
            else if (index == elements.Length - 1 && (elements[index] == "#" || elements[index] == "+"))
            {
                //add to promiscious keys
                PromiscuousKeys.Remove(key);
            }
            else
            {
                //add on proper list
                MqttTopicNode <TKey> node;
                lock (Children)
                {
                    node = Children.TryGetOrDefault(elements[index]);
                    if (node == null)
                    {
                        return(false);
                    }
                }
                //continue recursion
                removed = node._recRemove(elements, key, index + 1);
            }

            //cleanup?
            return(removed | cleanUp());
        }