mirror of
https://bitbucket.org/theswgsource/src-1.2.git
synced 2026-09-30 15:13:12 -04:00
158 lines
5.3 KiB
C++
158 lines
5.3 KiB
C++
// ======================================================================
|
|
//
|
|
// DataCleanupManager.cpp
|
|
// copyright (c) 2004 Sony Online Entertainment
|
|
//
|
|
// ======================================================================
|
|
|
|
#include "SwgDatabaseServer/FirstSwgDatabaseServer.h"
|
|
#include "DataCleanupManager.h"
|
|
|
|
#include "SwgDatabaseServer/TaskConsolidateExperience.h"
|
|
#include "SwgDatabaseServer/TaskDailyCleanup.h"
|
|
#include "SwgDatabaseServer/TaskAnySQL.h"
|
|
#include "SwgDatabaseServer/TaskObjvarNameCleanup.h"
|
|
#include "SwgDatabaseServer/TaskOrphanedObjectCleanup.h"
|
|
#include "SwgDatabaseServer/TaskMarketAttributesCleanup.h"
|
|
#include "SwgDatabaseServer/TaskMessagesCleanup.h"
|
|
#include "SwgDatabaseServer/TaskBrokenObjectCleanup.h"
|
|
#include "SwgDatabaseServer/TaskVendorObjectCleanup.h"
|
|
#include "SwgDatabaseServer/TaskFixBadCells.h"
|
|
#include "SwgDatabaseServer/TaskObjectTemplateListUpdater.h"
|
|
#include "serverDatabase/DatabaseProcess.h"
|
|
#include "sharedDatabaseInterface/DbTaskQueue.h"
|
|
#include "sharedLog/Log.h"
|
|
#include "sharedLog/LogManager.h"
|
|
#include "sharedFoundation/Os.h"
|
|
#include "serverDatabase/ConfigServerDatabase.h"
|
|
#include "serverMetrics/MetricsManager.h"
|
|
#include "sharedNetwork/NetworkHandler.h"
|
|
|
|
// ======================================================================
|
|
|
|
DataCleanupManager::DataCleanupManager() :
|
|
m_taskQueue(new DB::TaskQueue(1, DatabaseProcess::getInstance().getDBServer(), 0))
|
|
{
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
DataCleanupManager::~DataCleanupManager()
|
|
{
|
|
delete m_taskQueue; // Note: The destructor of TaskQueue waits for all the tasks to be finished
|
|
}
|
|
|
|
// ----------------------------------------------------------------------
|
|
|
|
void DataCleanupManager::runDailyCleanup( void )
|
|
{
|
|
if ( ConfigServerDatabase::getEnableFixBadCells() ) // do this first...
|
|
{
|
|
TaskFixBadCells *task = new TaskFixBadCells;
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
if ( ConfigServerDatabase::getObjectTemplateListUpdateFilename() != 0)
|
|
{
|
|
TaskObjectTemplateListUpdater *task = new TaskObjectTemplateListUpdater( ConfigServerDatabase::getObjectTemplateListUpdateFilename() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
if ( ConfigServerDatabase::getEnableDataCleanup() )
|
|
{
|
|
if ( ConfigServerDatabase::getExperienceConsolidationTime() != 0)
|
|
{
|
|
TaskConsolidateExperience *task = new TaskConsolidateExperience( ConfigServerDatabase::getExperienceConsolidationTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
if ( ConfigServerDatabase::getObjvarNameCleanupTime() != 0)
|
|
{
|
|
TaskObjvarNameCleanup *task = new TaskObjvarNameCleanup( ConfigServerDatabase::getObjvarNameCleanupTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
if ( ConfigServerDatabase::getOrphanedObjectCleanupTime() != 0)
|
|
{
|
|
TaskOrphanedObjectCleanup *task = new TaskOrphanedObjectCleanup( ConfigServerDatabase::getOrphanedObjectCleanupTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
LOG("Cleanup:attributes:",("%d", ConfigServerDatabase::getMarketAttributesCleanupTime() ));
|
|
if ( ConfigServerDatabase::getMarketAttributesCleanupTime() != 0)
|
|
{
|
|
TaskMarketAttributesCleanup *task = new TaskMarketAttributesCleanup( ConfigServerDatabase::getMarketAttributesCleanupTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
LOG("Cleanup:messages:",("%d", ConfigServerDatabase::getMarketAttributesCleanupTime() ));
|
|
if ( ConfigServerDatabase::getMessagesCleanupTime() != 0)
|
|
{
|
|
TaskMessagesCleanup *task = new TaskMessagesCleanup( ConfigServerDatabase::getMessagesCleanupTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
LOG("Cleanup:brokenobj:",("%d", ConfigServerDatabase::getBrokenObjectCleanupTime() ));
|
|
if ( ConfigServerDatabase::getBrokenObjectCleanupTime() != 0)
|
|
{
|
|
TaskBrokenObjectCleanup *task = new TaskBrokenObjectCleanup( ConfigServerDatabase::getBrokenObjectCleanupTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
|
|
if ( ConfigServerDatabase::getVendorObjectCleanupTime() != 0)
|
|
{
|
|
TaskVendorObjectCleanup *task = new TaskVendorObjectCleanup( ConfigServerDatabase::getVendorObjectCleanupTime() );
|
|
m_taskQueue->asyncRequest(task);
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
// Open custom sql file and execute everything in there (in queries folder)
|
|
//
|
|
std::string s_filename( ConfigServerDatabase::getCustomSQLFilename() );
|
|
if ( s_filename.length() )
|
|
{
|
|
std::string s_path( "../../src/game/server/database/queries/" );
|
|
s_path += s_filename;
|
|
FILE* in = fopen(s_path.c_str(), "r");
|
|
if ( in )
|
|
{
|
|
char line[4096];
|
|
std::string s_sql;
|
|
while( fgets(line, 4096, in ) )
|
|
{
|
|
if ( line[0] != '#' )
|
|
s_sql+=line;
|
|
if ( s_sql.find(';') != std::string::npos )
|
|
{
|
|
TaskAnySQL *task = new TaskAnySQL( s_sql.c_str() );
|
|
m_taskQueue->asyncRequest( task );
|
|
s_sql.clear();
|
|
}
|
|
}
|
|
fclose( in );
|
|
}
|
|
else
|
|
{
|
|
LOG("Cleanup:AnySQL:",("Couldn't open: %s",s_path.c_str()));
|
|
}
|
|
}
|
|
|
|
|
|
// Sleep until all the cleanup is done....
|
|
while( m_taskQueue->isIdle() == false )
|
|
{
|
|
const int ki_sleeptime = 100;
|
|
Os::sleep(ki_sleeptime);
|
|
m_taskQueue->update(float(ki_sleeptime) / float(1000.0));
|
|
MetricsManager::update(float(ki_sleeptime) / float(1000.0));
|
|
NetworkHandler::update();
|
|
NetworkHandler::dispatch();
|
|
NetworkHandler::clearBytesThisFrame();
|
|
}
|
|
}
|
|
|
|
|
|
// ======================================================================
|