private void ItemToLuaTableKVP(ref StringBuilder sb, BaseInfoAndAttribute infoAttr) { var itemType = infoAttr.InfoType; var itemName = infoAttr.InfoName; sb.Append("\t\t\t"); sb.Append(LUA_API); sb.Append(".lua_pushstring(L, \""); sb.Append(itemName); sb.Append("\");\r\n"); //TypeToPushCode(ref sb, itemType, itemName); sb.Append("\t\t\t"); var code = PushByType(itemType, "msg." + itemName); if (string.IsNullOrEmpty(code)) { sb.Append(LUA_API); sb.Append(".lua_pushnil(L);\r\n"); } else { sb.Append(code); } sb.Append("\t\t\t"); sb.Append(LUA_API); sb.Append(".xlua_psettable(L, -3);\r\n"); }
private void ItemToLuaTableKVP2(ref StringBuilder sb, BaseInfoAndAttribute infoAttr) { var itemType = infoAttr.InfoType; var itemName = infoAttr.InfoName; sb.Append("\t\t\t"); var code = PushByType2(itemType, itemName, "msg." + itemName); sb.Append(code); sb.Append("\t\t\t"); }
private void ProtoMemberToTableKV(ref StringBuilder sb, BaseInfoAndAttribute infoAndAttr) { var itemType = infoAndAttr.InfoType; var itemName = infoAndAttr.InfoName; // 将枚举转成int 传入, lua中有对应的 lua enum if (itemType.IsEnum) { CodeLine(ref sb, "string", "int", itemName, "(int)", "枚举转化成 Int 进行传递"); } else { var typeToStr = TypeExtentions.TypeToString(itemType); if (!string.IsNullOrEmpty(typeToStr)) { CodeLine(ref sb, "string", typeToStr, itemName, string.Empty); } else { //Tip("Type = {0} 在 TypeExtentions 中预定义类型中找不到。", itemType.FullName); if (itemType.IsClass) { //Tip("{0} 是 Class 类型 {1}", itemName, itemType); if (itemType.IsGenericList()) { var genericArguments = itemType.GetGenericArguments(); if (genericArguments != null) { if (genericArguments.Length == 1) { var arg = genericArguments[0]; if (Has <ProtoContractAttribute>(arg)) { var argNamespace = arg.Namespace; // 如果这个类的命名空间不在同一个命名空间中就将引入它的命名空间 if (!string.IsNullOrEmpty(argNamespace) && !argNamespace.Equals(this.m_type.Namespace)) { m_headerUsings.Add(argNamespace); } CodeLineLuaTableList(ref sb, itemName); } else { TipError("{0} GenericList arg's type = {1} 无 ProtoContactAttribute ", itemName, arg); } } else { TipError("注意: GenericList 泛型参数个数 = {0}, 暂时不支持解析!" + genericArguments.Length); } } //TipError("||| ********* " + itemName + " 是 GenericList 类型 " + itemType); } else if (itemType.IsArray) { TipError("********** 注意:Type = {0} is Array 类型, 暂时不支持解析!" + itemType.FullName + " ********"); } else { TypeToLuaTable(ref sb, itemType, itemName); } } else if (itemType.IsArray) { TipError(itemName + " 是 Array 类型 " + itemType); } } } }