2022-01-20 21:37:14 +01:00
|
|
|
#include <Logging/Logger.h>
|
|
|
|
#include <Service.h>
|
|
|
|
|
|
|
|
#include "TaskMgr.h"
|
|
|
|
#include "Task/Task.h"
|
|
|
|
|
|
|
|
using namespace Sapphire::World::Manager;
|
|
|
|
using namespace Sapphire::World;
|
|
|
|
|
|
|
|
void TaskMgr::update( uint64_t tickCount )
|
|
|
|
{
|
2023-03-10 17:32:52 +01:00
|
|
|
std::vector< TaskPtr > tmpTaskList;
|
|
|
|
for( const auto& pTask : m_taskList )
|
2022-01-20 21:37:14 +01:00
|
|
|
{
|
|
|
|
// is the task ready for execution?
|
|
|
|
if( ( tickCount - pTask->getQueueTimeMs() ) >= pTask->getDelayTimeMs() )
|
|
|
|
{
|
2022-01-20 23:40:18 +01:00
|
|
|
Logger::info( "[TaskMgr] " + pTask->toString() );
|
2022-01-20 21:37:14 +01:00
|
|
|
pTask->execute();
|
|
|
|
}
|
|
|
|
else
|
2023-03-10 17:32:52 +01:00
|
|
|
tmpTaskList.push_back( pTask );
|
2022-01-20 21:37:14 +01:00
|
|
|
}
|
|
|
|
|
2023-03-10 17:32:52 +01:00
|
|
|
m_taskList = tmpTaskList;
|
2022-01-20 21:37:14 +01:00
|
|
|
m_lastTick = tickCount;
|
|
|
|
|
2023-03-10 17:32:52 +01:00
|
|
|
while( !m_deferredTasks.empty() )
|
|
|
|
{
|
|
|
|
auto pTask = m_deferredTasks.front();
|
|
|
|
m_deferredTasks.pop();
|
|
|
|
m_taskList.push_back( pTask );
|
|
|
|
}
|
2022-01-20 21:37:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void TaskMgr::queueTask( const TaskPtr& pTask )
|
|
|
|
{
|
|
|
|
pTask->onQueue();
|
2023-03-10 17:32:52 +01:00
|
|
|
m_deferredTasks.push( pTask );
|
2022-01-20 21:37:14 +01:00
|
|
|
}
|