NF_SHARE_PTR<NFIRecordManager> NFCCommonRedisModule::NewRecordManager(const std::string& strClassName) { NF_SHARE_PTR<NFIRecordManager> pStaticClassRecordManager = m_pLogicClassModule->GetClassRecordManager(strClassName); if (pStaticClassRecordManager) { NFGUID ident; NF_SHARE_PTR<NFIRecordManager> pRecordManager(NF_NEW NFCRecordManager(ident)); NF_SHARE_PTR<NFIRecord> pConfigRecordInfo = pStaticClassRecordManager->First(); while (pConfigRecordInfo) { if (pConfigRecordInfo->GetSave() || pConfigRecordInfo->GetCache()) { NF_SHARE_PTR<NFIRecord> xRecord = pRecordManager->AddRecord(ident, pConfigRecordInfo->GetName(), pConfigRecordInfo->GetInitData(), pConfigRecordInfo->GetTag(), pConfigRecordInfo->GetRows()); xRecord->SetPublic(pConfigRecordInfo->GetPublic()); xRecord->SetPrivate(pConfigRecordInfo->GetPrivate()); xRecord->SetSave(pConfigRecordInfo->GetSave()); xRecord->SetCache(pConfigRecordInfo->GetCache()); } pConfigRecordInfo = pStaticClassRecordManager->Next(); } return pRecordManager; } return NF_SHARE_PTR<NFIRecordManager>(NULL); }
NF_SHARE_PTR<NFIPropertyManager> NFCCommonRedisModule::NewPropertyManager(const std::string& strClassName) { NF_SHARE_PTR<NFIPropertyManager> pStaticClassPropertyManager = m_pLogicClassModule->GetClassPropertyManager(strClassName); if (pStaticClassPropertyManager) { NFGUID ident; NF_SHARE_PTR<NFIPropertyManager> pPropertyManager(NF_NEW NFCPropertyManager(ident)); NF_SHARE_PTR<NFIProperty> pStaticConfigPropertyInfo = pStaticClassPropertyManager->First(); while (pStaticConfigPropertyInfo) { if (pStaticConfigPropertyInfo->GetSave() || pStaticConfigPropertyInfo->GetCache()) { NF_SHARE_PTR<NFIProperty> xProperty = pPropertyManager->AddProperty(ident, pStaticConfigPropertyInfo->GetKey(), pStaticConfigPropertyInfo->GetType()); xProperty->SetPublic(pStaticConfigPropertyInfo->GetPublic()); xProperty->SetPrivate(pStaticConfigPropertyInfo->GetPrivate()); xProperty->SetSave(pStaticConfigPropertyInfo->GetSave()); xProperty->SetCache(pStaticConfigPropertyInfo->GetCache()); xProperty->SetRef(pStaticConfigPropertyInfo->GetRef()); } pStaticConfigPropertyInfo = pStaticClassPropertyManager->Next(); } return pPropertyManager; } return NF_SHARE_PTR<NFIPropertyManager>(NULL); }
bool NFCCreateRoleModule::ConvertRecordManagerToPB(const NF_SHARE_PTR<NFIRecordManager>& pRecordManager, NFMsg::ObjectRecordList * pRecordDataList) { if (pRecordDataList == nullptr) { return false; } for (NF_SHARE_PTR<NFIRecord> pRecord = pRecordManager->First(); pRecord != NULL; pRecord = pRecordManager->Next()) { if (!pRecord->GetCache() && !pRecord->GetSave()) { continue; } NFMsg::ObjectRecordBase* pRecordData = pRecordDataList->add_record_list(); if (!pRecordData) { continue; } ConvertRecordToPB(pRecord, pRecordData); } return true; }
bool NFCCommonRedisModule::ConvertRecordManagerToVector(NF_SHARE_PTR<NFIRecordManager> pRecordManager, std::vector<std::string>& vKeyList, std::vector<std::string>& vValueList) { for (NF_SHARE_PTR<NFIRecord> pRecord = pRecordManager->First(); pRecord != NULL; pRecord = pRecordManager->Next()) { if (!pRecord->GetCache() && !pRecord->GetSave()) { continue; } NFMsg::ObjectRecordBase xRecordData; ConvertRecordToPB(pRecord, &xRecordData); //// std::string strValue; if (!xRecordData.SerializeToString(&strValue)) { continue; } vKeyList.push_back(xRecordData.record_name()); vValueList.push_back(strValue); } return true; }
bool NFCCommonRedisModule::ConvertVectorToRecordManager(std::vector<std::string>& vKeyList, std::vector<std::string>& vValueList, NF_SHARE_PTR<NFIRecordManager> pRecordManager) { if (vKeyList.size() == vValueList.size()) { for (int i = 0; i < vKeyList.size(); ++i) { const std::string& strKey = vKeyList[i]; const std::string& strValue = vValueList[i]; if (strValue.empty()) { continue; } NF_SHARE_PTR<NFIRecord> pRecord = pRecordManager->GetElement(strKey); if (!pRecord->GetCache() && !pRecord->GetSave()) { continue; } NFMsg::ObjectRecordBase xRecordData; if (xRecordData.ParseFromString(strValue)) { ConvertPBToRecord(xRecordData, pRecord); } else { //TODO //error } } } return true; }
bool NFCCommonRedisModule::ConvertVectorToPropertyManager(std::vector<std::string>& vKeyList, std::vector<std::string>& vValueList, NF_SHARE_PTR<NFIPropertyManager> pPropertyManager) { if (vKeyList.size() == vValueList.size()) { for (int i = 0; i < vKeyList.size(); ++i) { const std::string& strKey = vKeyList[i]; const std::string& strValue = vValueList[i]; if (strValue.empty()) { continue; } NF_SHARE_PTR<NFIProperty> pProperty = pPropertyManager->GetElement(strKey); if (!pProperty->GetCache() && !pProperty->GetSave()) { continue; } if(!pProperty->FromString(strValue)) { //TODO //error } } } return true; }
NF_SHARE_PTR<NFIPropertyManager> NFCCommonRedisModule::GetPropertyInfo(const NFGUID& self, const std::string& strClassName, std::vector<std::string>& vKeyCacheList, std::vector<std::string>& vValueCacheList) { //TODO optimize NF_SHARE_PTR<NFIPropertyManager> pPropertyManager = NewPropertyManager(strClassName); if (!pPropertyManager) { return nullptr; } NF_SHARE_PTR<NFIRedisClient> pDriver = m_pNoSqlModule->GetDriverBySuit(self.ToString()); if (!pDriver) { return nullptr; } //TODO //just run this function one time NF_SHARE_PTR<NFIProperty> xProperty = pPropertyManager->First(); while (xProperty) { if (xProperty->GetCache() || xProperty->GetSave()) { vKeyCacheList.push_back(xProperty->GetKey()); } xProperty = pPropertyManager->Next(); } //cache std::string strCacheKey = GetPropertyCacheKey(self); if (!pDriver->HMGET(strCacheKey, vKeyCacheList, vValueCacheList)) { return nullptr; } if (vKeyCacheList.size() == vValueCacheList.size()) { ConvertVectorToPropertyManager(vKeyCacheList, vValueCacheList, pPropertyManager); return pPropertyManager; } return nullptr; }
NF_SHARE_PTR<NFIProperty> NFCPropertyManager::AddProperty(const NFGUID& self, NF_SHARE_PTR<NFIProperty> pProperty) { const std::string& strProperty = pProperty->GetKey(); NF_SHARE_PTR<NFIProperty> pOldProperty = this->GetElement(strProperty); if (!pOldProperty.get()) { NF_SHARE_PTR<NFIProperty> pNewProperty(NF_NEW NFCProperty(self, strProperty, pProperty->GetType())); pNewProperty->SetPublic(pProperty->GetPublic()); pNewProperty->SetPrivate(pProperty->GetPrivate()); pNewProperty->SetSave(pProperty->GetSave()); pNewProperty->SetCache(pProperty->GetCache()); pNewProperty->SetRelationValue(pProperty->GetRelationValue()); this->AddElement(strProperty, pNewProperty); } return pOldProperty; }
bool NFCCommonRedisModule::ConvertPropertyManagerToVector(NF_SHARE_PTR<NFIPropertyManager> pPropertyManager, std::vector<std::string>& vKeyList, std::vector<std::string>& vValueList) { for (NF_SHARE_PTR<NFIProperty> pProperty = pPropertyManager->First(); pProperty != NULL; pProperty = pPropertyManager->Next()) { const int nType = pProperty->GetType(); if (!pProperty->GetCache() && !pProperty->GetSave()) { continue; } const std::string& strPropertyName = pProperty->GetKey(); const std::string& strPropertyValue = pProperty->ToString(); vKeyList.push_back(strPropertyName); vValueList.push_back(strPropertyValue); } return true; }
NF_SHARE_PTR<NFIRecordManager> NFCCommonRedisModule::GetRecordInfo(const NFGUID& self, const std::string& strClassName, std::vector<std::string>& vKeyCacheList, std::vector<std::string>& vValueCacheList) { NF_SHARE_PTR<NFIRecordManager> pRecordManager = NewRecordManager(strClassName); if (!pRecordManager.get()) { return nullptr; } NF_SHARE_PTR<NFIRedisClient> pDriver = m_pNoSqlModule->GetDriverBySuit(self.ToString()); if (!pDriver) { return nullptr; } //TODO //just run this function one time NF_SHARE_PTR<NFIRecord> xRecord = pRecordManager->First(); while (xRecord) { if (xRecord->GetCache() || xRecord->GetSave()) { vKeyCacheList.push_back(xRecord->GetName()); } xRecord = pRecordManager->Next(); } //cache std::string strCacheKey = GetRecordCacheKey(self); if (!pDriver->HMGET(strCacheKey, vKeyCacheList, vValueCacheList)) { return nullptr; } if (vKeyCacheList.size() == vValueCacheList.size()) { ConvertVectorToRecordManager(vKeyCacheList, vValueCacheList, pRecordManager); return pRecordManager; } return nullptr; }
bool NFCElementModule::Load(rapidxml::xml_node<>* attrNode, NF_SHARE_PTR<NFIClass> pLogicClass) { //attrNode is the node of a object std::string strConfigID = attrNode->first_attribute("Id")->value(); if (strConfigID.empty()) { NFASSERT(0, strConfigID, __FILE__, __FUNCTION__); return false; } if (ExistElement(strConfigID)) { NFASSERT(0, strConfigID, __FILE__, __FUNCTION__); return false; } NF_SHARE_PTR<ElementConfigInfo> pElementInfo(NF_NEW ElementConfigInfo()); AddElement(strConfigID, pElementInfo); //can find all configid by class name pLogicClass->AddConfigName(strConfigID); //ElementConfigInfo* pElementInfo = CreateElement( strConfigID, pElementInfo ); NF_SHARE_PTR<NFIPropertyManager> pElementPropertyManager = pElementInfo->GetPropertyManager(); NF_SHARE_PTR<NFIRecordManager> pElementRecordManager = pElementInfo->GetRecordManager(); //1.add property //2.set the default value of them NF_SHARE_PTR<NFIPropertyManager> pClassPropertyManager = pLogicClass->GetPropertyManager(); NF_SHARE_PTR<NFIRecordManager> pClassRecordManager = pLogicClass->GetRecordManager(); if (pClassPropertyManager.get() && pClassRecordManager.get()) { NF_SHARE_PTR<NFIProperty> pProperty = pClassPropertyManager->First(); while (pProperty.get()) { pElementPropertyManager->AddProperty(NFGUID(), pProperty); pProperty = pClassPropertyManager->Next(); } NF_SHARE_PTR<NFIRecord> pRecord = pClassRecordManager->First(); while (pRecord.get()) { NF_SHARE_PTR<NFIRecord> xRecord = pElementRecordManager->AddRecord(NFGUID(), pRecord->GetName(), pRecord->GetInitData(), pRecord->GetTag(), pRecord->GetRows()); xRecord->SetPublic(pRecord->GetPublic()); xRecord->SetPrivate(pRecord->GetPrivate()); xRecord->SetSave(pRecord->GetSave()); xRecord->SetCache(pRecord->GetCache()); pRecord = pClassRecordManager->Next(); } } //3.set the config value to them //const char* pstrConfigID = attrNode->first_attribute( "ID" ); for (rapidxml::xml_attribute<>* pAttribute = attrNode->first_attribute(); pAttribute; pAttribute = pAttribute->next_attribute()) { const char* pstrConfigName = pAttribute->name(); const char* pstrConfigValue = pAttribute->value(); //printf( "%s : %s\n", pstrConfigName, pstrConfigValue ); NF_SHARE_PTR<NFIProperty> temProperty = pElementPropertyManager->GetElement(pstrConfigName); if (!temProperty) { continue; } NFIDataList::TData var; const TDATA_TYPE eType = temProperty->GetType(); switch (eType) { case TDATA_INT: { if (!LegalNumber(pstrConfigValue)) { NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); } var.SetInt(lexical_cast<NFINT64>(pstrConfigValue)); } break; case TDATA_FLOAT: { if (strlen(pstrConfigValue) <= 0) { NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); } var.SetFloat((double)atof(pstrConfigValue)); } break; case TDATA_STRING: { var.SetString(pstrConfigValue); } break; case TDATA_OBJECT: { if (strlen(pstrConfigValue) <= 0) { NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); } var.SetObject(NFGUID()); } break; default: NFASSERT(0, temProperty->GetKey(), __FILE__, __FUNCTION__); break; } temProperty->SetValue(var); if (eType == TDATA_STRING) { temProperty->DeSerialization(); } } NFIDataList::TData xData; xData.SetString(pLogicClass->GetClassName()); pElementPropertyManager->SetProperty("ClassName", xData); return true; }
bool NFCCreateRoleModule::ConvertPropertyManagerToPB(const NF_SHARE_PTR<NFIPropertyManager>& pProps, NFMsg::ObjectPropertyList * pPropertyData) { if (pProps) { NF_SHARE_PTR<NFIProperty> xPropert = pProps->First(); while (xPropert) { if (xPropert->GetCache() || xPropert->GetSave()) { switch (xPropert->GetType()) { case NFDATA_TYPE::TDATA_INT: { NFMsg::PropertyInt* pData = pPropertyData->add_property_int_list(); pData->set_property_name(xPropert->GetKey()); pData->set_data(xPropert->GetInt()); } break; case NFDATA_TYPE::TDATA_FLOAT: { NFMsg::PropertyFloat* pData = pPropertyData->add_property_float_list(); pData->set_property_name(xPropert->GetKey()); pData->set_data(xPropert->GetFloat()); } break; case NFDATA_TYPE::TDATA_OBJECT: { NFMsg::PropertyObject* pData = pPropertyData->add_property_object_list(); pData->set_property_name(xPropert->GetKey()); *(pData->mutable_data()) = NFINetModule::NFToPB(xPropert->GetObject()); } break; case NFDATA_TYPE::TDATA_STRING: { NFMsg::PropertyString* pData = pPropertyData->add_property_string_list(); pData->set_property_name(xPropert->GetKey()); pData->set_data(xPropert->GetString()); std::cout << xPropert->GetKey() << " " << xPropert->GetString() << std::endl; } break; case NFDATA_TYPE::TDATA_VECTOR2: { NFMsg::PropertyVector2* pData = pPropertyData->add_property_vector2_list(); pData->set_property_name(xPropert->GetKey()); *(pData->mutable_data()) = NFINetModule::NFToPB(xPropert->GetVector2()); } break; case NFDATA_TYPE::TDATA_VECTOR3: { NFMsg::PropertyVector3* pData = pPropertyData->add_property_vector3_list(); pData->set_property_name(xPropert->GetKey()); *(pData->mutable_data()) = NFINetModule::NFToPB(xPropert->GetVector3()); } break; default: break; } } xPropert = pProps->Next(); } } return false; }