| 135 | } |
| 136 | |
| 137 | bool AFCClassMetaModule::LoadEntityMeta(const std::string& schema_path) |
| 138 | { |
| 139 | std::string file_path = GetPluginManager()->GetResPath() + schema_path; |
| 140 | |
| 141 | ARK_LOG_INFO("Load entity class files: {}", file_path); |
| 142 | |
| 143 | AFXml xml_doc(file_path); |
| 144 | auto root_node = xml_doc.GetRootNode(); |
| 145 | ARK_ASSERT_RET_VAL(root_node.IsValid(), false); |
| 146 | |
| 147 | for (auto meta_node = root_node.FindNode("meta"); meta_node.IsValid(); meta_node.NextNode()) |
| 148 | { |
| 149 | std::string class_name = meta_node.GetString("class"); |
| 150 | std::string data_name = meta_node.GetString("field_name"); |
| 151 | std::string type_name = meta_node.GetString("type"); |
| 152 | std::string type_class = meta_node.GetString("type_class"); |
| 153 | uint32_t index = AFMetaNameIndex::GetIndex(class_name, data_name); |
| 154 | |
| 155 | // data mask |
| 156 | uint32_t feature_sync_view = meta_node.GetUint32("sync_view"); |
| 157 | uint32_t feature_sync_self = meta_node.GetUint32("sync_self"); |
| 158 | uint32_t feature_save = meta_node.GetUint32("save"); |
| 159 | uint32_t feature_real_time = meta_node.GetUint32("real_time"); |
| 160 | |
| 161 | // class meta |
| 162 | auto pClassMeta = m_pClassMetaManager->CreateMeta(class_name); |
| 163 | ARK_ASSERT_RET_VAL(pClassMeta != nullptr, false); |
| 164 | |
| 165 | if (type_name == "class") |
| 166 | { |
| 167 | continue; |
| 168 | } |
| 169 | |
| 170 | // data mask |
| 171 | ArkMaskType mask; |
| 172 | mask[(size_t)ArkDataMask::PF_SYNC_VIEW] = (feature_sync_view > 0 ? 1 : 0); |
| 173 | mask[(size_t)ArkDataMask::PF_SYNC_SELF] = (feature_sync_self > 0 ? 1 : 0); |
| 174 | mask[(size_t)ArkDataMask::PF_SAVE] = (feature_save > 0 ? 1 : 0); |
| 175 | mask[(size_t)ArkDataMask::PF_REAL_TIME] = (feature_real_time > 0 ? 1 : 0); |
| 176 | |
| 177 | if (type_name == "container") |
| 178 | { |
| 179 | auto pContainerMeta = pClassMeta->CreateContainerMeta(data_name, index, type_class, mask); |
| 180 | ARK_ASSERT_RET_VAL(pContainerMeta != nullptr, false); |
| 181 | continue; |
| 182 | } |
| 183 | |
| 184 | // convert type |
| 185 | ArkDataType data_type = ConvertDataType(type_name); |
| 186 | ARK_ASSERT_RET_VAL(data_type != ArkDataType::DT_EMPTY, false); |
| 187 | |
| 188 | if (ArkDataType::DT_TABLE == data_type) |
| 189 | { |
| 190 | // create table meta |
| 191 | auto pTableMeta = pClassMeta->CreateTableMeta(data_name, index); |
| 192 | ARK_ASSERT_RET_VAL(pTableMeta != nullptr, false); |
| 193 | |
| 194 | pTableMeta->SetTypeName(type_class); |
nothing calls this directly
no test coverage detected