示例#1
0
            void parse()
            {
                MemberInfo[] mbs = type.GetMembers();
                foreach (MemberInfo mb in mbs)
                {
                    PBMember pbm = new PBMember();
                    //获取所有ProtoMemberAttribute属性(PB字段)
                    ProtoMemberAttribute attr = Attribute.GetCustomAttribute(mb, typeof(ProtoMemberAttribute)) as ProtoMemberAttribute;
                    if (attr != null)
                    {
                        pbm.name    = attr.Name;
                        pbm.tag     = attr.Tag;
                        pbm.datafmt = attr.DataFormat;
                        DefaultValueAttribute dva = Attribute.GetCustomAttribute(mb, typeof(DefaultValueAttribute)) as DefaultValueAttribute;
                        if (dva != null)
                        {
                            pbm.defaultVaule = dva.Value;
                        }
                        pbm.isRequire      = attr.IsRequired;
                        pbm.isPacked       = attr.IsPacked;
                        pbm.isOverrideList = attr.OverwriteList;
                    }

                    ProtoEnumAttribute pea = Attribute.GetCustomAttribute(mb, typeof(ProtoEnumAttribute)) as ProtoEnumAttribute;
                    if (pea != null)
                    {
                        pbm.name         = pea.Name;
                        pbm.defaultVaule = pea.Value;
                    }

                    if (attr == null && pea == null)
                    {
                        continue;
                    }

                    Type memberType = null;
                    switch (mb.MemberType)
                    {
                    case MemberTypes.Field:
                        memberType = ((FieldInfo)mb).FieldType; break;

                    case MemberTypes.Property:
                        memberType = ((PropertyInfo)mb).PropertyType; break;

                    default:
                        throw new NotSupportedException(mb.MemberType.ToString());
                    }
                    pbm.valueType = memberType;
                    addMember(pbm);
                }
            }
示例#2
0
 private void ProtoEnumToLuaEnum(ref StringBuilder sb, Type itemType, string itemName, ProtoEnumAttribute protoEnumAttribute, bool isLastOne = false)
 {
     if (protoEnumAttribute != null)
     {
         sb.Append("\t");
         sb.Append(protoEnumAttribute.Name);
         sb.Append(" = ");
         // proto 2+
         //sb.Append(protoEnumAttribute.Value.ToString());
         // proto 3+
         var enums = Enum.GetValues(itemType);
         foreach (var item in enums)
         {
             if (item.ToString().Equals(itemName))
             {
                 sb.Append((int)item);
                 break;
             }
         }
         if (isLastOne)
         {
             sb.Append("\r\n");
         }
         else
         {
             sb.Append(",\r\n");
         }
     }
 }