示例#1
0
        void DescribeMessageRecursive(IMessageExplorer explorer, IMessage message)
        {
            var descriptor = message.Descriptor;

            foreach (var field in descriptor.Fields.InDeclarationOrder())
            {
                if (field.FieldType == FieldType.Message && field.IsRepeated)
                {
                    var values = ((IEnumerable)field.Accessor.GetValue(message)).Cast<IMessage>().ToArray();
                    for (int i = 0; i < values.Length; i++)
                    {
                        var messageListExplorer = explorer.AddChildObject(field.Name);
                        DescribeMessageRecursive(messageListExplorer, values[i]);
                    }
                }
                else if (field.FieldType == FieldType.Message)
                {
                    var messageValue = (IMessage)field.Accessor.GetValue(message);
                    if (messageValue == null)
                    {
                        explorer.AddKeyValuePair(field.Name, GetClrType(field.FieldType), null);
                    }
                    else
                    {
                        var messageExplorer = explorer.AddChildObject(field.Name);
                        DescribeMessageRecursive(messageExplorer, messageValue);
                    }
                }
                else if (field.IsRepeated)
                {
                    var collectionExplorer = explorer.AddChildObject(field.Name);
                    var type = GetClrType(field.FieldType);

                    var values = ((IEnumerable)field.Accessor.GetValue(message)).Cast<object>().ToArray();
                    for (int i = 0; i < values.Length; i++)
                    {
                        collectionExplorer.AddKeyValuePair(i, type, values[i]);
                    }
                }
                else
                {
                    explorer.AddKeyValuePair(field.Name, GetClrType(field.FieldType), field.Accessor.GetValue(message));
                }
            }
        }
示例#2
0
        public void Describe(IMessageExplorer explorer, IInterceptedMessage message)
        {
            var interceptedMessage = (InterceptedMessage)message;
            var messageObject = (IMessage)Activator.CreateInstance(interceptedMessage.ObjectType);

            try
            {
                messageObject.MergeFrom(interceptedMessage.GetInputStream());
            }
            catch (InvalidProtocolBufferException ex)
            {
                explorer.AddError(string.Format(CultureInfo.InvariantCulture, "An error occured whilst parsing this message: {0}", ex.Message));
                return;
            }

            var messageExplorer = explorer.AddChildObject(interceptedMessage.MessageType);
            DescribeMessageRecursive(messageExplorer, messageObject);
        }
        public void Describe(IMessageExplorer explorer, IInterceptedMessage message)
        {
            explorer.AddKeyValuePair("success", typeof(bool), true);

            var child = explorer.AddChildObject("child");
            child.AddKeyValuePair("text", typeof(string), "this is some text");
            child.AddKeyValuePair("int", typeof(int), 42);

            var simpleList = explorer.AddChildObject("simple_list");
            simpleList.AddKeyValuePair(0, typeof(string), "aaa");
            simpleList.AddKeyValuePair(1, typeof(string), "bbb");
            simpleList.AddKeyValuePair(2, typeof(string), "ccc");
            simpleList.AddKeyValuePair(3, typeof(string), "ddd");

            var complexList = explorer.AddChildObject("complex_list");
            for (var i = 0; i < 5; i++)
            {
                complexList.AddChildObject(i, "ChildObject").AddKeyValuePair("key", typeof(string), "value");
            }
        }
 public void Describe(IMessageExplorer explorer, IInterceptedMessage message)
 {
 }