void CDataManagerThread::run() { time_t prevTime; time(&prevTime); WriteShopInfoToExcel(); while(!m_bThreadExit) { //检查是否有数据需要写入数据库 if(CheckDataList()) { //写数据 WriteToDatabase(); } time_t curTime; time(&curTime); if(curTime - prevTime > MessageDataMediator->m_lExcelSavePerTime) { WriteShopInfoToExcel(); prevTime = curTime; } msleep(10000); //收集10秒之内的SQL } }
//----------------------------------------------------------------------------- bool psNPCLoader::LoadFromFile(csString &filename) { area.Clear(); CPrintf(CON_DEBUG, "Importing NPC from file: %s\n",filename.GetData()); // try to read data from the file csRef<iVFS> vfs = csQueryRegistry<iVFS> (psserver->GetObjectReg()); csRef<iDataBuffer> data(vfs->ReadFile(filename.GetData())); if(!data || !data->GetSize()) { CPrintf(CON_ERROR, "Error: Couldn't load file '%s'.\n", filename.GetData()); return false; } csRef<iDocumentSystem> xml; xml.AttachNew(new csTinyDocumentSystem); csRef<iDocument> doc = xml->CreateDocument(); const char* error = doc->Parse(data); if(error) { Error2("Error in XML: %s", error); return false; } npcRoot = doc->GetRoot()->GetNode("npc"); if(!npcRoot) { CPrintf(CON_ERROR, "Error: no <npc> tag found\n"); return false; } dialogManager = new psDialogManager; npc = new psCharacter; npc->SetCharType(PSCHARACTER_TYPE_NPC); // process xml data if(!ReadBasicInfo() || !ReadLocation()) { CPrintf(CON_ERROR, "Error: Failed to load NPC data\n"); return false; } ReadDescription(); ReadTraits(); ReadStats(); ReadMoney(); ReadSkills(); ReadTrainerInfo(); ReadMerchantInfo(); ReadFactions(); ReadKnowledgeAreas(); ReadSpecificKnowledge(); ReadSpecialResponses(); // insert processed data into the database if(!WriteToDatabase()) { CPrintf(CON_ERROR, "Error: Failed to insert data into the database\n"); return false; } return true; }