VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simTaskManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 #pragma once
11 
12 #include <readerWriter/rwBoolean.h>
13 #include <vector>
14 #include <map>
15 #include "vrfobjcore/vrfObject.h"
19 #include <vlutil/vlSmartPointers.h>
22 #include <set>
23 
25 class DtSimTask;
26 class DtSimComponent;
28 class DtVrfObjectMessage;
29 class DtTaskMessage;
30 class DtSimMessage;
34 class DtScriptedTaskTask;
37 
40 typedef void (*DtOnTaskNotifyCallbackFcn)(
41  const DtSimTask & task, const DtSimComponent &notifier, void* usr);
42 
45 {
47  void* myUserData;
48 };
49 
55 {
56 private:
59 
60 public:
62  typedef std::set<DtSimTaskMessageType> SupportingTasks;
63  typedef std::map<int, SupportingTasks> AvailableSupportingTasks;
64 
66  DtSimTaskManager(const DtString & name, DtVrfObject * vrfObject,
67  DtReaderWriterRegistry * parentRegistry = 0);
68 
70  DtSimTaskManager(const DtSimTaskManager & orig,
71  DtReaderWriterRegistry * parentRegistry = 0);
72 
74  const DtSimTaskManager & operator=(const DtSimTaskManager & orig);
75 
77  virtual ~DtSimTaskManager();
78 
80  virtual bool init();
81 
83  virtual void tick();
84 
92  virtual void addTaskProcessor(const DtSimTaskMessageType& taskType,
93  DtTaskControllerComponent* taskController);
94 
97  virtual void removeTaskProcessor(const DtSimTaskMessageType& taskType,
98  DtTaskControllerComponent* taskController);
99 
101  virtual void removeAllReferencesToController(DtTaskControllerComponent*
102  taskController);
103 
107  virtual std::vector<DtSimTaskMessageType> capableTaskIds() const;
108 
111  virtual AvailableSupportingTasks supportingTasks() const;
112 
114  virtual SupportingTasks supportingTasks(int) const;
115 
118  virtual void addSupportingTask(int, const DtSimTaskMessageType&);
119  virtual void addSupportingTasks(int, const SupportingTasks&);
120  virtual void removeSupportingTask(int, const DtSimTaskMessageType&);
121  virtual void removeSupportingTasks(int);
123 
138  virtual bool executeTask(DtTaskMessage& taskMsg, bool clearConflictingTopLevelTasks = true, bool doNotAbandonPlan = false);
139  virtual bool executeTask(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState, bool clearConflictingTopLevelTasks = true, bool doNotAbandonPlan = false);
141 
144  virtual void addBackgroundProcess(const DtString& scriptId, int backgroundProcessId, const DtString& controllerName);
145  virtual void removeBackgroundProcess(const DtString& scriptId);
146 
148  virtual void addScriptedSet(const DtString& scriptId, int backgroundProcessId, const DtString& controllerName);
149  virtual void removeScriptedSet(const DtString& scriptId);
150 
157  virtual bool transitionTask(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState);
158 
162  virtual int suspendTasks(std::set<DtString> actionCategories);
165  virtual int suspendAllTopLevelTasks();
168  virtual int suspendSubtask(int taskId, int subtaskId);
169 
172  virtual DtSuspendedTaskInfo* suspendTask(int taskId);
173 
175  virtual bool resumeTasks(int suspendId);
176 
178 
179  virtual void addTaskCompleteCallback(DtTaskCompleteCallbackList::DtCallbackFunctionType fcn, void* usr);
180  virtual void removeTaskCompleteCallback(DtTaskCompleteCallbackList::DtCallbackFunctionType fcn, void* usr);
182 
185  virtual bool taskActive(int taskId) const;
186 
188  virtual void registerInterfaceMessageCallbacks();
189 
191  virtual void registerRadioMessageCallbacks();
192 
195  virtual void taskNotify(const DtSimTask & task, const DtSimComponent& notifier,
196  bool clearConflictingTopLevelTasks = true);
197 
201  virtual void skipTask(bool fromSuperior = false);
202 
208  virtual void taskComplete(const DtVrfObjectMessage & radioMsg, bool success, bool affectsIndependentTaskStatus = true);
209 
212  virtual void sendTaskCompleted(const DtTaskMessage& taskMsg, bool success);
213 
216  void awaitingTask(int taskIdJustCompleted = -1);
217 
220  virtual void setTaskedBySuperior();
221 
223  virtual bool requestTaskNeeded() const;
224 
226  virtual void setRequestTaskNeeded(bool requestTaskNeeded);
227 
230  virtual bool independentlyTasked() const;
231 
234  virtual void setIndependentlyTasked(bool independentlyTasked);
235 
238  virtual bool isPseudoAggregate() const { return false; }
239 
242  virtual DtString type() const;
243 
245  virtual DtVrfObject * vrfObject() const;
246 
249  virtual void setVrfObject(DtVrfObject * vrfObject);
250 
254  virtual void setSendSkipTaskMessages(bool sendSkipTaskMessages);
255  virtual bool sendSkipTaskMessages();
257 
260  virtual void addOnTaskNotifyCallback(
261  DtOnTaskNotifyCallbackFcn fcn, void* userData);
262 
265  virtual void removeOnTaskNotifyCallback(
266  DtOnTaskNotifyCallbackFcn fcn, void* userData);
267 
270  virtual void clearSubtask(int subtaskId);
271 
274  virtual DtTaskWithTaskStateListPtr topLevelTasks() const;
275 
277  virtual bool hasTopLevelTask() const;
278 
281  virtual bool taskTypesAreExclusive(const DtSimTaskMessageType& taskType1, const DtSimTaskMessageType& taskType2) const;
282 
287  virtual bool taskTypesAreExclusive(const std::list<DtString>& task1Categories, const DtSimTaskMessageType& taskType2) const;
288 
290  virtual bool canExecuteTask(const DtSimTaskMessageType&) const;
291 
292  virtual void clearTaskByType(const DtSimTaskMessageType& taskType);
293 
294  virtual void updateTaskInfo();
295 
297  virtual bool canBeExecutedConcurrently(const DtSimTaskMessageType& taskType) const;
298 
301  virtual DtScriptReactiveTaskController* reactiveTaskController();
302  virtual void setReactiveTaskController(DtScriptReactiveTaskController* reactiveTaskController);
303 
306  static void taskedBySuperiorRequestCallback(DtSimMessage * msg, void *
307  usrData);
308 
311  static void skipTaskCallback(DtSimMessage * msg, void * usr);
312 
315  static void clearTaskCallback(DtSimMessage * msg, void * usr);
316 
319  static void taskVisualizationRequestCallback(DtSimMessage * msg, void * usr);
320 
324  static void objectAboutToBeRemovedCallback(const DtVrfObject* object, void* usr);
325 
328  static void subordinateRemoved(const DtUUID& superior, const DtUUID& subordinate, void* usr);
329 
330  static DtSimTaskManager * creator(const DtString & name,
331  DtVrfObject * vrfObject, DtReaderWriterRegistry * parentRegistry);
332 
337  static DtSimTaskManagerFactory * factory();
338  static void setFactory(DtSimTaskManagerFactory * factory);
339 
340  static void addSimTaskManagerCreatorFcn(const DtString & type,
342 
344  static DtSimTaskManager * createTaskManager(const DtString & name,
345  const DtString & type, DtVrfObject * vrfObject,
346  DtReaderWriterRegistry * parentRegistry = 0);
347 
349  virtual bool hasTopLevelTasks() const;
350 
352  virtual bool taskVisualizationsEnabled(bool includeUnTimedOut) const;
353 
355  virtual bool taskVisualizationsActivated() const;
356 
357 protected:
358 
362  virtual void processClearTask(DtSimMessage * msg);
363 
365  virtual void processTaskVisualizationRequest(DtSimMessage * msg);
366 
370  virtual void processObjectAboutToBeRemoved(const DtVrfObject* object);
371 
372  virtual void resumeTaskTree(DtSuspendedTaskInfo* suspendedTaskInfo, DtSuspendedTaskInfo* parentTaskInfo = 0);
373 
376  virtual bool clearAllTopLevelTasks();
377 
381  virtual void clearConflictingTopLevelTasks(const DtSimTaskMessageType& taskType);
382 
385  virtual void onTaskNotify(const DtSimTask & task, const DtSimComponent &
386  notifier);
387 
392  void processSubordinateRemoved(const DtUUID& superior, const DtUUID& subordinate);
393 
396  static void taskMessageCallback(DtSimMessage* msg, void* usr);
397 
399  virtual void processTaskMessage(DtSimMessage* msg);
400 
402  virtual bool startTaskExecution(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState,
403  bool taskNotify, bool clearConflictingTopLevelTasks = true, bool doNotAbandonPlan = false);
404 
408  virtual std::vector<DtSimTaskMessageType> conflictingTaskTypes(const DtSimTaskMessageType& testTaskType) const;
409 
411  virtual std::list<DtString> taskGroupsForTask(const DtSimTaskMessageType& taskType) const;
412 
413  static void requestCurrentTasksCallback(const DtVrfObjectMessage* msg, void* usr);
414  virtual void processRequestCurrentTasks(const DtVrfObjectMessage* msg);
415 
416  static void unsubscribeCurrentTasksCallback(const DtVrfObjectMessage* msg, void* usr);
417  virtual void processUnsubscribeCurrentTasks(const DtVrfObjectMessage* msg);
418 
419  virtual void sendCurrentTasks();
420  virtual void addSubtasksToCurrentTaskMessage(const DtSuspendedTaskInfoList& subtaskList, int parentTaskId, int status, DtCurrentTasksAdminContent& adminContent);
421 
423  virtual void updateTaskVisualizationList();
424 
426  virtual void sendCurrentTaskVisualizations();
427 
429  virtual void stopCurrentTaskVisualizations();
430 
431  static void clearTaskByTrackingNumberCallback(const DtVrfObjectMessage* msg, void* usr);
432  virtual void processClearTaskByTrackingNumber(const DtVrfObjectMessage* msg);
433 
434  static DtGlobalObjectDesignator nextTaskVisualizationGlobalIdCallback(void* usr);
435  virtual DtGlobalObjectDesignator nextTaskVisualizationGlobalId();
436 
439  virtual void registerSetDataMessageCallbacks();
440  virtual void unregisterSetDataMessageCallbacks();
441 
442  virtual void registerTaskMessageCallbacks();
443  virtual void unregisterTaskMessageCallbacks();
444 
446 protected:
448 
449  typedef std::map<DtSimTaskMessageType, DtTaskControllerComponent*> DtTaskProcessorMap;
450 
451  std::vector<DtOnTaskNotifyCallbackInfo> myOnTaskNotifyCallbacks;
452 
454 
458 
462 
467 
471 
473  std::set<DtSimulationAddress> myTaskVisualizationRequestors;
474 
477 
479 
481 
483 
485 
487 
489  {
490  int taskId;
492  };
493 
494  typedef std::map<DtString, BackgroundProcessInformation> BackgroundProcesses;
495 
498 
499  DtBoost::shared_ptr<DtBulkEnvironmentProcessManager> myTaskVisualizationManager;
500 
502 
504  std::list<DtTaskVisualizationPtr> myCurrentTaskVisualizations;
505  std::list<DtTaskVisualizationPtr> myCurrentInactiveTaskVisualizations;
506 };
DtTime myTaskVisualizationRemovalTime
Time at which task visualizations should be removed.
Definition: simTaskManager.h:476
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
Class Description: DtControllerComponentList.
Definition: controllerComponentList.h:38
Container used in callback lists.
Definition: simTaskManager.h:44
std::map< DtString, BackgroundProcessInformation > BackgroundProcesses
Definition: simTaskManager.h:494
DtVrfObject * myVrfObject
Definition: simTaskManager.h:447
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
DtBoost::shared_ptr< DtBulkEnvironmentProcessManager > myTaskVisualizationManager
Definition: simTaskManager.h:499
DtScriptReactiveTaskController * myReactiveTaskController
Definition: simTaskManager.h:480
DtString controllerName
Definition: simTaskManager.h:491
std::vector< DtOnTaskNotifyCallbackInfo > myOnTaskNotifyCallbacks
Definition: simTaskManager.h:451
static DtSimTaskManagerFactory * theFactory
Definition: simTaskManager.h:482
All the information about a single suspended task.
Definition: suspendedTaskInfo.h:23
std::list< DtTaskVisualizationPtr > myCurrentTaskVisualizations
Updated every tick with the current task visualizations.
Definition: simTaskManager.h:504
bool mySendTasksNextTick
Set to true if the task manager should send the list of current tasks next tick.
Definition: simTaskManager.h:470
int myNumberOfTaskSubscriptions
Counter which holds the number of times the current task status has been subscribed to minus the numb...
Definition: simTaskManager.h:466
Definition: readerWriter.h:85
std::set< DtSimTaskMessageType > SupportingTasks
Definition: simTaskManager.h:62
End User Description: DtTaskControllerComponent is the base class for all controllers that respond to...
Definition: taskControllerComponent.h:48
Definition: readerWriterRegistry.h:39
DtTaskCompleteCallbackList myTaskCompleteCallbackList
Definition: simTaskManager.h:478
unsigned myNextTaskVisualizationId
Definition: simTaskManager.h:501
class DtSimTaskManagerFactory:
Definition: simTaskManagerFactory.h:33
void(* DtOnTaskNotifyCallbackFcn)(const DtSimTask &task, const DtSimComponent &notifier, void *usr)
Callback function definition for callbacks registered to be invoked when taskNotify() is called (when...
Definition: simTaskManager.h:40
DtBoost::shared_ptr< DtSimTaskState > DtSimTaskStatePtr
Definition: taskAndTaskStateDefines.h:18
static DtReaderWriterFactory * factory()
bool myHaveRegisteredOrgMgrCallback
Definition: simTaskManager.h:453
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Specialized classes.
Definition: scriptedTaskTask.h:270
DtOnTaskNotifyCallbackFcn myCallbackFunction
Definition: simTaskManager.h:46
File: simMsg.h.
Definition: simMessage.h:35
void * myUserData
Definition: simTaskManager.h:47
DtTaskProcessorMap myTaskProcessorMap
Stores all the registered task processor interfaces, indexed by task type they process.
Definition: simTaskManager.h:457
bool mySendSkipTaskMessages
Determines whether processSubordinateRemoved will send a skip task message.
Definition: simTaskManager.h:461
DtSimTaskManager *(* DtSimTaskManagerCreatorFcn)(const DtString &name, DtVrfObject *vrfObject, DtReaderWriterRegistry *parentRegistry)
Definition: simTaskManagerFactory.h:23
AvailableSupportingTasks myAvailableSupportingTasks
Definition: simTaskManager.h:486
Define constants for types of tasks, sets, admin messages, reports, and sim commands (all sent via ra...
std::list< DtTaskVisualizationPtr > myCurrentInactiveTaskVisualizations
Definition: simTaskManager.h:505
The base class for all messages to/from a specific DtVrfObject.
Definition: vrfObjectMessage.h:30
DtCallbackList< const DtTaskMessage & > DtTaskCompleteCallbackList
Definition: simTaskManager.h:61
DtBoost::shared_ptr< DtTaskWithTaskStateList > DtTaskWithTaskStateListPtr
Definition: taskAndTaskStateDefines.h:27
std::set< DtSimulationAddress > myTaskVisualizationRequestors
Whether task visualizations are enabled for this object.
Definition: simTaskManager.h:473
Class Description: DtSimTaskManager manages the bookkeeping associated with starting, completing, clearing, and skipping tasks.
Definition: simTaskManager.h:54
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:67
Admin content that is used to send the current tasks status from a specific entity.
Definition: currentTasksAdminContent.h:113
DtSimTask is an abstract base class from which real tasks can derive.
Definition: simTask.h:33
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
BackgroundProcesses myBackgroundProcesses
Definition: simTaskManager.h:496
const DtReaderWriter & operator=(const DtReaderWriter &orig)
assignment operator
std::map< int, SupportingTasks > AvailableSupportingTasks
Definition: simTaskManager.h:63
int taskId
Definition: simTaskManager.h:490
Definition: simInterfaceContent.h:45
std::map< DtSimTaskMessageType, DtTaskControllerComponent * > DtTaskProcessorMap
Definition: simTaskManager.h:449
virtual bool isPseudoAggregate() const
Indicates whether or not the type of task manager created supports pseudo-aggregates.
Definition: simTaskManager.h:238
BackgroundProcesses myScriptedSets
Definition: simTaskManager.h:497
DtBulkEnvironmentProcessManager.
Definition: bulkEnvironmentProcessManager.h:24
A DtTaskMsg is a DtRadioMsg with a pointer to a task.
Definition: taskMessage.h:19
bool myResumingTasks
Definition: simTaskManager.h:484
Definition: simTaskManager.h:488
READ ME!
Definition: scriptReactiveTaskController.h:52

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)