Пример #1
0
 internal EventMetadata(Guid providerGuid, ushort id, byte version, string name, PropertyMetadata[] properties)
 {
     this.ProviderGuid = providerGuid;
     this.Id = id;
     this.Version = version;
     this.Name = name;
     this.Properties = properties;
 }
            public IEventTraceOperand Build(int eventMetadataTableIndex)
            {
                foreach (var instrumentationManifestTypeItem in this.manifest.Items)
                {
                    var instrumentationType = instrumentationManifestTypeItem as InstrumentationType;
                    if (instrumentationType != null)
                    {
                        foreach (var instrumentationTypeItem in instrumentationType.Items)
                        {
                            var eventTypes = instrumentationTypeItem as EventsType;
                            if (eventTypes != null)
                            {
                                foreach (var eventTypeItem in eventTypes.Items)
                                {
                                    var providerType = eventTypeItem as ProviderType;
                                    if (providerType != null)
                                    {
                                        var providerName = providerType.name;
                                        var providerGuid = new Guid(providerType.guid);

                                        foreach (var providerTypeItem in providerType.Items)
                                        {
                                            var definitionType = providerTypeItem as DefinitionType;
                                            if (definitionType != null)
                                            {
                                                foreach (EventDefinitionType definitionTypeItem in definitionType.Items)
                                                {
                                                    if (string.Equals(definitionTypeItem.value, this.eventId.ToString("D")))
                                                    {
                                                        string task = definitionTypeItem.task == null ? string.IsNullOrEmpty(definitionTypeItem.symbol) ? "Task" : definitionTypeItem.symbol : definitionTypeItem.task.Name;
                                                        string opcode = definitionTypeItem.opcode == null ? string.Empty : definitionTypeItem.opcode.Name;
                                                        string version = definitionTypeItem.version;
                                                        string template = definitionTypeItem.template;

                                                        string name = providerName + "/" + task + (opcode == string.Empty ? string.Empty : "/" + opcode);
                                                        var properties = new List<IEventTracePropertyOperand>();

                                                        foreach (var item in providerType.Items)
                                                        {
                                                            var templateList = item as TemplateListType;
                                                            if (templateList != null)
                                                            {
                                                                foreach (var templateTid in templateList.template)
                                                                {
                                                                    if (string.Equals(templateTid.tid, template))
                                                                    {
                                                                        int i = 0;
                                                                        foreach (DataDefinitionType propertyItem in templateTid.Items)
                                                                        {
                                                                            var inType = Extensions.ToTdhInType(propertyItem.inType.Name);
                                                                            var outType = TDH_OUT_TYPE.TDH_OUTTYPE_NOPRINT;
                                                                            var metadata = new PropertyMetadata(inType, outType, propertyItem.name, false, false, 0, null);
                                                                            properties.Add(new EventTracePropertyOperand(metadata, i++, false, false, false, false, false));
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }

                                                        var operand = new EventTraceOperand(
                                                            new EventMetadata(
                                                                providerGuid,
                                                                this.eventId,
                                                                byte.Parse(version),
                                                                name,
                                                                properties.Select(t => t.Metadata).ToArray()), eventMetadataTableIndex,
                                                            properties);
                                                        return operand;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }

                return null;
            }
Пример #3
0
 public void WritePropertyBegin(PropertyMetadata metadata)
 {
     this.writer.WritePropertyName(metadata.Name);
 }