예제 #1
0
    /*public ObjectDumpNode(string text)
    {
      Name = text;
      IsVisible = true;
    }*/

    /*public ObjectDumpNode(string text, object target)
    {
      Name = text;
      //Target = target;
      IsVisible = true;
    }*/

    public ObjectDumpNode(string text, ObjectDumpNode parent = null)
    {
      Name = text;
      //Target = target;
      Parent = parent;
      IsVisible = true;
    }
예제 #2
0
        /*public ObjectDumpNode(string text)
         * {
         * Name = text;
         * IsVisible = true;
         * }*/

        /*public ObjectDumpNode(string text, object target)
         * {
         * Name = text;
         * //Target = target;
         * IsVisible = true;
         * }*/

        public ObjectDumpNode(string text, ObjectDumpNode parent = null)
        {
            Name = text;
            //Target = target;
            Parent    = parent;
            IsVisible = true;
        }
예제 #3
0
        public ObjectDumpNode GetDumpTree()
        {
            Type type = Target.GetType();
            var tree = new ObjectDumpNode(type.Name);

            foreach (var node in InternalDump(Target, tree))
            {
                tree.Childrens.Add(node);
            }

            return tree;
        }
예제 #4
0
        public ObjectDumpNode GetDumpTree()
        {
            Type type = Target.GetType();
            var  tree = new ObjectDumpNode(type.Name);

            foreach (var node in InternalDump(Target, tree))
            {
                tree.Childrens.Add(node);
            }

            return(tree);
        }
예제 #5
0
        private void OnMesssageDispatched(MessageDispatcher dispatcher, Message message)
        {
            if (IsPaused && !OnTheFly)
            {
                return;
            }

            var            dumper = new TreeDumper(message);
            ObjectDumpNode tree   = dumper.GetDumpTree();

            NetworkMessage networkMessage = message as NetworkMessage;

            if (networkMessage != null)
            {
                tree.TimeStamp = DateTime.Now;
                tree.Id        = networkMessage.MessageId;
                tree.From      = networkMessage.From;

                foreach (ObjectDumpNode child in tree.Childrens)
                {
                    if (m_seeProperties)
                    {
                        child.IsVisible = true;
                    }
                    else if (child.IsProperty)
                    {
                        child.IsVisible = false;
                    }
                }

                if (!IsPaused)
                {
                    m_messages.Add(tree);

                    #region Cleaning : avoid memory overflow on a long run
                    if (NbMessagesToKeep > 0 && m_messages.Count > NbMessagesToKeep)
                    {
                        m_messages.RemoveAt(0);
                    }
                    #endregion Cleaning : avoid memory overflow on a long run
                }
                #region Record On the fly
                if (OnTheFly)
                {
                    FlushOnTheFly(tree.ExportToString(true));
                }
                #endregion Record On the fly
            }
            else
            if (OnTheFly)
            {
                if (message is InformationMessage)
                {
                    #region Record On the fly
                    if (OnTheFly)
                    {
                        FlushOnTheFly((message as InformationMessage).Message + "\n");
                    }
                    #endregion Record On the fly
                }
            }
        }
예제 #6
0
        public IEnumerable<ObjectDumpNode> InternalDump(object obj, ObjectDumpNode parent)
        {
            if (obj == null || obj is ValueType || obj is string)
            {
                yield return new ObjectDumpNode(FormatValue(obj), parent);
                yield break;
            }

            var enumerableElement = obj as IEnumerable;
            if (enumerableElement != null)
            {
                int count = 0;
                foreach (object item in enumerableElement)
                {
                    count++;
                    if (item == null || item is ValueType || item is string)
                    {
                        yield return new ObjectDumpNode(FormatValue(item), parent);
                    }
                    else
                    {
                        var node = new ObjectDumpNode(item.GetType().Name, parent);
                        foreach (var child in InternalDump(item, node))
                        {
                            node.Childrens.Add(child);
                        }
                        yield return node;
                    }
                }


                if (count == 0)
                {
                    yield return new ObjectDumpNode("-Empty-", parent);
                    yield break;
                }
            }
            else
            {

                Type type = obj.GetType();

                PropertyInfo[] properties = type.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

                foreach (PropertyInfo property in properties)
                {
                    object value = property.GetValue(obj, new object[0]);

                    if (value is MulticastDelegate)
                        continue;

                    var node = new ObjectDumpNode(property.Name, parent);
                    foreach (var child in InternalDump(value, node))
                    {
                        node.Childrens.Add(child);
                    } 
                    node.IsProperty = true;
                    yield return node;
                }

                FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

                foreach (FieldInfo field in fields)
                {
                    object value = field.GetValue(obj);

                    if (value is MulticastDelegate)
                        continue;

                    var node = new ObjectDumpNode(field.Name, parent);
                    foreach (var child in InternalDump(value, node))
                    {
                        node.Childrens.Add(child);
                    } 
                    yield return node;
                }
            }
        }
예제 #7
0
        public IEnumerable <ObjectDumpNode> InternalDump(object obj, ObjectDumpNode parent)
        {
            if (obj == null || obj is ValueType || obj is string)
            {
                yield return(new ObjectDumpNode(FormatValue(obj), parent));

                yield break;
            }

            var enumerableElement = obj as IEnumerable;

            if (enumerableElement != null)
            {
                int count = 0;
                foreach (object item in enumerableElement)
                {
                    count++;
                    if (item == null || item is ValueType || item is string)
                    {
                        yield return(new ObjectDumpNode(FormatValue(item), parent));
                    }
                    else
                    {
                        var node = new ObjectDumpNode(item.GetType().Name, parent);
                        foreach (var child in InternalDump(item, node))
                        {
                            node.Childrens.Add(child);
                        }
                        yield return(node);
                    }
                }


                if (count == 0)
                {
                    yield return(new ObjectDumpNode("-Empty-", parent));

                    yield break;
                }
            }
            else
            {
                Type type = obj.GetType();

                PropertyInfo[] properties = type.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

                foreach (PropertyInfo property in properties)
                {
                    object value = property.GetValue(obj, new object[0]);

                    if (value is MulticastDelegate)
                    {
                        continue;
                    }

                    var node = new ObjectDumpNode(property.Name, parent);
                    foreach (var child in InternalDump(value, node))
                    {
                        node.Childrens.Add(child);
                    }
                    node.IsProperty = true;
                    yield return(node);
                }

                FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

                foreach (FieldInfo field in fields)
                {
                    object value = field.GetValue(obj);

                    if (value is MulticastDelegate)
                    {
                        continue;
                    }

                    var node = new ObjectDumpNode(field.Name, parent);
                    foreach (var child in InternalDump(value, node))
                    {
                        node.Childrens.Add(child);
                    }
                    yield return(node);
                }
            }
        }