VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/taskMgr.h
Go to the documentation of this file.
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 &notifier, 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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)