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)); } } }
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) { }