![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2006 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: taskMgr.h,v $ $Revision: 1.20 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef DtSimTaskManager_H_ 00015 #define DtSimTaskManager_H_ 00016 00017 #include "vrfutil/rwBoolean.h" 00018 #include <vector> 00019 #include <map> 00020 #include "vrfobjcore/vrfObject.h" 00021 #include "vrfobjcore/taskMgrFact.h" 00022 #include "vrftasks/taskAndTaskStateDefines.h" 00023 #include <vlutil/vlSmartPointers.h> 00024 00025 class DtControllerComponentList; 00026 class DtSimTask; 00027 class DtSimComponent; 00028 class DtSimInterfaceContent; 00029 class DtVrfObjectMessage; 00030 class DtTaskMessage; 00031 class DtSimMessage; 00032 class DtTaskControllerComponent; 00033 00036 typedef void (*DtOnTaskNotifyCallbackFcn)( 00037 const DtSimTask & task, const DtSimComponent ¬ifier, void* usr); 00038 00040 struct DtOnTaskNotifyCallbackInfo 00041 { 00042 DtOnTaskNotifyCallbackFcn myCallbackFunction; 00043 void* myUserData; 00044 }; 00045 00049 #include "vrfobjcore/vrfobjcoreDefines.h" 00050 class DT_DLL_vrfobjcore DtSimTaskManager : public DtReaderWriter 00051 { 00052 private: 00054 DtSimTaskManager(); 00055 00056 public: 00057 00059 DtSimTaskManager(const DtString & name, DtVrfObject * vrfObject, 00060 DtReaderWriterRegistry * parentRegistry = 0); 00061 00063 DtSimTaskManager(const DtSimTaskManager & orig, 00064 DtReaderWriterRegistry * parentRegistry = 0); 00065 00067 const DtSimTaskManager & operator=(const DtSimTaskManager & orig); 00068 00070 virtual ~DtSimTaskManager(); 00071 00073 virtual bool init(); 00074 00076 virtual void tick(); 00077 00085 virtual void addTaskProcessor(int taskType, 00086 DtTaskControllerComponent* taskController); 00087 00090 virtual void removeTaskProcessor(int taskType, 00091 DtTaskControllerComponent* taskController); 00092 00094 virtual void removeAllReferencesToController(DtTaskControllerComponent* 00095 taskController); 00096 00100 virtual std::vector<int> capableTaskIds() const; 00101 00113 virtual bool executeTask(DtTaskMessage& taskMsg); 00114 virtual bool executeTask(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState); 00116 00123 virtual bool transitionTask(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState); 00124 00127 virtual bool taskActive(int taskId) const; 00128 00130 virtual void registerInterfaceMessageCallbacks(); 00131 00133 virtual void registerRadioMessageCallbacks(); 00134 00137 virtual void taskNotify(const DtSimTask & task, const DtSimComponent & 00138 notifier); 00139 00143 virtual void skipTask(bool fromSuperior = false); 00144 00148 virtual void taskComplete(const DtVrfObjectMessage & radioMsg, bool success); 00149 00152 virtual void sendTaskCompleted(const DtTaskMessage& taskMsg, bool success); 00153 00156 void awaitingTask(int taskIdJustCompleted = -1); 00157 00160 virtual void setTaskedBySuperior(); 00161 00163 virtual bool requestTaskNeeded() const; 00164 00166 virtual void setRequestTaskNeeded(bool requestTaskNeeded); 00167 00170 virtual bool independentlyTasked() const; 00171 00174 virtual void setIndependentlyTasked(bool independentlyTasked); 00175 00179 virtual bool currentTasksMatchEchelonId(); 00180 00183 virtual bool isPseudoAggregate() const { return false; } 00184 00187 virtual DtString type() const; 00188 00190 virtual DtVrfObject * vrfObject() const; 00191 00194 virtual void setVrfObject(DtVrfObject * vrfObject); 00195 00198 00199 virtual void setSendSkipTaskMessages(bool sendSkipTaskMessages); 00200 virtual bool sendSkipTaskMessages(); 00201 //} 00202 00205 virtual void addOnTaskNotifyCallback( 00206 DtOnTaskNotifyCallbackFcn fcn, void* userData); 00207 00210 virtual void removeOnTaskNotifyCallback( 00211 DtOnTaskNotifyCallbackFcn fcn, void* userData); 00212 00215 virtual void clearSubtask(int subtaskId); 00216 00219 virtual DtTaskWithTaskStateListPtr topLevelTasks() const; 00220 00222 virtual bool hasTopLevelTask() const; 00223 00226 virtual bool taskTypesAreExclusive(int taskType1, int taskType2) const; 00227 00229 virtual bool canExecuteTask(int) const; 00230 00233 static void taskedBySuperiorRequestCallback(DtSimMessage * msg, void * 00234 usrData); 00235 00238 static void skipTaskCallback(DtSimMessage * msg, void * usr); 00239 00242 static void clearTaskCallback(DtSimMessage * msg, void * usr); 00243 00247 static void objectAboutToBeRemovedCallback(DtVrfObject* object, void* usr); 00248 00251 static void subordinateRemoved(DtEntityIdentifier childEid, void* usr); 00252 00253 static DtSimTaskManager * creator(const DtString & name, 00254 DtVrfObject * vrfObject, DtReaderWriterRegistry * parentRegistry); 00255 00260 static DtSimTaskManagerFactory * factory(); 00261 static void setFactory(DtSimTaskManagerFactory * factory); 00262 00263 static void addSimTaskManagerCreatorFcn(const DtString & type, 00264 DtSimTaskManagerCreatorFcn fcn); 00265 00267 static DtSimTaskManager * createTaskManager(const DtString & name, 00268 const DtString & type, DtVrfObject * vrfObject, 00269 DtReaderWriterRegistry * parentRegistry = 0); 00270 00271 protected: 00272 00276 virtual void processClearTask(DtSimMessage * msg); 00277 00281 virtual void processObjectAboutToBeRemoved(DtVrfObject* object); 00282 00285 virtual bool clearAllTopLevelTasks(); 00286 00290 virtual void clearConflictingTopLevelTasks(int taskType); 00291 00294 virtual void onTaskNotify(const DtSimTask & task, const DtSimComponent & 00295 notifier); 00296 00301 void processSubordinateRemoved(DtEntityIdentifier childEid); 00302 00305 static void taskMessageCallback(DtSimMessage* msg, void* usr); 00306 00308 virtual void processTaskMessage(DtSimMessage* msg); 00309 00313 virtual std::vector<int> conflictingTaskTypes(int testTaskType) const; 00314 00315 static void requestCurrentTasksCallback(const DtVrfObjectMessage* msg, void* usr); 00316 virtual void processRequestCurrentTasks(const DtVrfObjectMessage* msg); 00317 00318 static void unsubscribeCurrentTasksCallback(const DtVrfObjectMessage* msg, void* usr); 00319 virtual void processUnsubscribeCurrentTasks(const DtVrfObjectMessage* msg); 00320 00321 virtual void sendCurrentTasks(); 00322 00323 protected: 00324 DtVrfObject * myVrfObject; 00325 00326 typedef std::map<int, DtTaskControllerComponent*> DtTaskProcessorMap; 00327 00328 std::vector<DtOnTaskNotifyCallbackInfo> myOnTaskNotifyCallbacks; 00329 00330 bool myHaveRegisteredOrgMgrCallback; 00331 00334 DtTaskProcessorMap myTaskProcessorMap; 00335 00338 bool mySendSkipTaskMessages; 00339 00343 int myNumberOfTaskSubscriptions; 00344 00347 bool mySendTasksNextTick; 00348 00349 static DtSimTaskManagerFactory* theFactory; 00350 }; 00351 00352 #endif 00353