Set up both config file and resouce database for the application.
| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hdsApp::InitResources | (void) |
Declared in file: hzDissemino.h
Defined in file : hdsCore.cpp
Function Logic:
Function body:
hzEcode hdsApp::InitResources (void)
{
// Category: Dissemino System Initialization
//
// Set up both config file and resouce database for the application.
_hzfunc("hdsApp::InitResources") ;
hzMD5 valMD5 ; // MD5 value for resource
hzString valURL ; // Resource URL/Path
hzString cfgs ; // Config delta file
uint32_t fdate ; // Epoch date of config file
uint32_t n ; // Resource counter
hzEcode rc = E_OK ; // Return code
// Define class for config files
if (!m_Datadir)
return hzerr(E_NOINIT, "No data directory") ;
m_pLog->Log("COMMENCING RESOURCE INIT\n") ;
threadLog("m_Configs Population %u\n", m_Configs.Count()) ;
cfgs = m_Datadir ;
cfgs += "/config.cache" ;
m_Configs.DeltaSet(cfgs) ;
m_Configs.DeltaOpen() ;
threadLog("Opened file %s\n", *cfgs) ;
threadLog("m_Configs Population %u\n", m_Configs.Count()) ;
for (n = 0; n < m_Configs.Count() ; n++)
{
valURL = m_Configs.GetKey(n) ;
fdate = m_Configs.GetObj(n) ;
threadLog("Have config file of %010u [%s]\n", fdate, *valURL) ;
}
// Define class for resources
if (!m_pClass_Resource)
{
m_pLog->Log("Resource class definition\n") ;
if (rc == E_OK) m_pClass_Resource = new hdbClass(m_ADP, HDB_CLASS_DESIG_CFG) ;
if (rc == E_OK) rc = m_pClass_Resource->InitStart(s_cls_Resource) ;
if (rc == E_OK) rc = m_pClass_Resource->InitMember(s_mbr_Resource_DATE, "xdate", HDB_MBR_POP_SINGLE_COMPULSORY) ; // Date of last update
if (rc == E_OK) rc = m_pClass_Resource->InitMember(s_mbr_Resource_PATH, "string", HDB_MBR_POP_SINGLE_COMPULSORY) ; // Resource URL
if (rc == E_OK) rc = m_pClass_Resource->InitMember(s_mbr_Resource_MD5, "hashMD5", HDB_MBR_POP_SINGLE_COMPULSORY) ; // MD5 of the resource config XML
if (rc == E_OK) rc = m_pClass_Resource->InitMember(s_mbr_Resource_XML, "binary", HDB_MBR_POP_SINGLE_COMPULSORY) ; // Resource config XML (as previously accepted)
if (rc == E_OK) rc = m_pClass_Resource->InitMember(s_mbr_Resource_HTM, "binary", HDB_MBR_POP_SINGLE_OPTIONAL) ; // Resource proforma HTML (as per the config XML)
if (rc == E_OK) rc = m_pClass_Resource->InitMember(s_mbr_Resource_Zip, "binary", HDB_MBR_POP_SINGLE_OPTIONAL) ; // Zipped HTML if page is inactive
if (rc == E_OK) rc = m_pClass_Resource->InitDone() ;
if (rc == E_OK) rc = m_ADP.RegisterDataClass(m_pClass_Resource) ;
if (rc == E_OK)
m_pLog->Log("Registered resource class\n") ;
else
{
m_pLog->Log("Could not register resource class\n") ;
return rc ;
}
m_pMbr_Resource_DATE = m_pClass_Resource->GetMember(s_mbr_Resource_DATE) ;
m_pMbr_Resource_PATH = m_pClass_Resource->GetMember(s_mbr_Resource_PATH) ;
m_pMbr_Resource_MD5 = m_pClass_Resource->GetMember(s_mbr_Resource_MD5) ;
m_pMbr_Resource_XML = m_pClass_Resource->GetMember(s_mbr_Resource_XML) ;
m_pMbr_Resource_HTM = m_pClass_Resource->GetMember(s_mbr_Resource_HTM) ;
m_pMbr_Resource_Zip = m_pClass_Resource->GetMember(s_mbr_Resource_Zip) ;
}
// Set up resources repository
if (!m_pRepos_Resource)
{
if (rc == E_OK) m_pRepos_Resource = new hdbObjRepos(m_ADP) ;
if (rc == E_OK) m_pStore_Resource = new hdbBinRepos(m_ADP) ;
m_pLog->Log("Resource Repos %p, Binary %p\n", m_pRepos_Resource, m_pStore_Resource) ;
rc = m_pStore_Resource->Init(s_bin_Resource, m_Datadir) ;
if (rc != E_OK)
{ m_pLog->Log("Could not init resource binary datum repository\n") ; return rc ; }
rc = m_pStore_Resource->Open() ;
if (rc != E_OK)
{ m_pLog->Log("Could not open resource binary datum repository\n") ; return rc ; }
rc = m_pStore_Resource->Integ(*m_pLog) ;
if (rc != E_OK)
{ m_pLog->Log("Could not integrity check resource binary datum repository\n") ; return rc ; }
if (rc == E_OK) rc = m_pRepos_Resource->InitStart(m_pClass_Resource, s_rep_Resource, m_Datadir, HDB_REPOS_CACHE) ;
if (rc == E_OK) rc = m_pRepos_Resource->InitMbrIndex(s_mbr_Resource_PATH, false) ;
if (rc == E_OK) rc = m_pRepos_Resource->InitDone() ;
if (rc == E_OK) rc = m_pRepos_Resource->Open() ;
if (rc == E_OK)
m_pLog->Log("Initialized and opened resource repository\n") ;
else
{
m_pLog->Log("Could not init/open resource repository\n") ;
return rc ;
}
}
// Load the resources into the m_ResourceMD5 map
m_pLog->Log("LISTING Resources\n") ;
rc = m_objResource.Init(m_pClass_Resource) ;
if (rc != E_OK)
m_pLog->Log("Could not init resource object\n") ;
for (n = 0; n < m_pRepos_Resource->Count() ; n++)
{
rc = m_pRepos_Resource->Fetch(m_objResource, n+1);
if (rc != E_OK)
{
m_pLog->Log("Could not fetch resource item %d (err=%s)\n", n+1,Err2Txt(rc)) ;
continue ;
}
m_objResource.GetMbrValue(valURL, m_pMbr_Resource_PATH) ;
m_objResource.GetMbrValue(valMD5, m_pMbr_Resource_MD5) ;
m_pLog->Log("Resource %u: %s %s\n", n+1,valMD5.Txt(), *valURL) ;
}
m_pLog->Log("END of Resources list\n") ;
return rc ;
}