//===========================================================================// // File: apptask.cpp // // Project: MUNGA Brick: Application // // Contents: Interface specification for Application // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 08/24/94 ECH Initial coding. // //---------------------------------------------------------------------------// // Copyright (C) 1994-1995, Virtual World Entertainment, Inc. // // All Rights reserved worldwide // // This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL // //===========================================================================// #include "AdeptHeaders.hpp" #include "ApplicationTask.hpp" #include "EntityManager.hpp" #include #if 1 #define TASK_LOGIC(string) LOGIC("Background Tasks::" string) #else #define TASK_LOGIC(string) #endif //############################################################################# //########################### ApplicationTask ########################### //############################################################################# ApplicationTask::ClassData* ApplicationTask::DefaultData = NULL; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void ApplicationTask::InitializeClass() { Verify(!DefaultData); DefaultData = new ClassData( ApplicationTaskClassID, "Adept::ApplicationTask", BackgroundTasks::DefaultData ); Check_Object(DefaultData); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void ApplicationTask::TerminateClass() { Check_Object(DefaultData); delete DefaultData; DefaultData = NULL; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ApplicationTask::ApplicationTask(ClassData *class_data): Plug(class_data) { } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ApplicationTask::~ApplicationTask() { } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // bool ApplicationTask::Execute() { return false; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void ApplicationTask::TestInstance() { Verify(IsDerivedFrom(DefaultData)); } //############################################################################# //########################### BackgroundTasks ########################### //############################################################################# //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // BackgroundTasks::BackgroundTasks(): Plug(DefaultData), taskSocket(NULL) { taskIterator = new SafeChainIteratorOf(&taskSocket); Check_Object(taskIterator); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // BackgroundTasks::~BackgroundTasks() { Check_Object(taskIterator); taskIterator->DeletePlugs(); Check_Object(taskIterator); delete taskIterator; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void BackgroundTasks::AddTask(ApplicationTask *task) { Check_Object(this); Check_Object(task); taskSocket.Add(task); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // bool BackgroundTasks::Execute() { Check_Object(this); ApplicationTask *task; Check_Object(taskIterator); taskIterator->First(); while ((task = taskIterator->ReadAndNext()) != NULL) { Check_Object(task); task->Execute(); } return false; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ProcessEventTask ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int ProcessEventTask::ProcessEventCalls = 0; bool ProcessEventTask::Execute() { TASK_LOGIC("Process Event"); Check_Object(this); bool result=false; double stop = gos_GetHiResTime() + 800.0e-6; Check_Object(EventQueue::Instance); do { result = EventQueue::Instance->ProcessOneEvent(); } while (result && gos_GetHiResTime() < stop); return result; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FryDeathRowTask ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bool FryDeathRowTask::Execute() { TASK_LOGIC("Fry Death Row"); Check_Object(this); Check_Object(EntityManager::GetInstance()); bool ret = EntityManager::GetInstance()->FryDeathRow(); return ret; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RoutePacketsTask ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bool RoutePacketsTask::Execute() { Check_Object(this); TASK_LOGIC("Route Packets"); if (Network::GetInstance() != NULL) { Check_Object(Network::GetInstance()); while( Network::GetInstance()->RoutePacket() ){} } return false; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RoutePacketsTask ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ bool RouteLocalPacketsTask::Execute() { Check_Object(this); TASK_LOGIC("Route Local Packets"); if (Network::GetInstance() != NULL) { #ifdef GROUP_ADEPT_NETWORK LOG_BLOCK("Game Logic::Network::Route Packet"); #endif Check_Object(Network::GetInstance()); Network::GetInstance()->RouteLocalPacket(); } return false; }