VR-Forces Developer's Guide
 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 
13 #include <readerWriter/rwBoolean.h>
14 #include <vector>
15 #include <map>
18 #include <vlutil/vlSmartPointers.h>
20 #include <readerWriter/rwInt.h>
25 #include <set>
26 
28 class DtSimTask;
29 class DtSimComponent;
31 class DtVrfObjectMessage;
32 class DtTaskMessage;
33 class DtSimMessage;
37 class DtScriptedTaskTask;
39 
42 typedef void (*DtOnTaskNotifyCallbackFcn)(
43  const DtSimTask & task, const DtSimComponent &notifier, void* usr);
44 
47 {
49  void* myUserData;
50 };
51 
56 {
57 private:
60 
62  DtSimTaskManager(const DtSimTaskManager & orig);
63 
65  const DtSimTaskManager & operator=(const DtSimTaskManager & orig);
66 
67 public:
69  typedef std::set<DtSimTaskMessageType> SupportingTasks;
70  typedef std::map<int, SupportingTasks> AvailableSupportingTasks;
71 
73  DtSimTaskManager(const DtString & name, DtLocalObject* vrfObject, const DtString& naame = "sim-task-manager", DtReaderWriterRegistry* parentRegistry = nullptr);
74 
76  virtual ~DtSimTaskManager() override;
77 
79  virtual bool init();
80 
82  virtual void tick();
83 
91  virtual void addTaskProcessor(const DtSimTaskMessageType& taskType,
92  DtTaskControllerComponent* taskController);
93 
96  virtual void removeTaskProcessor(const DtSimTaskMessageType& taskType,
97  DtTaskControllerComponent* taskController);
98 
100  virtual void removeAllReferencesToController(DtTaskControllerComponent*
101  taskController);
102 
106  virtual std::vector<DtSimTaskMessageType> capableTaskIds() const;
107 
110  virtual AvailableSupportingTasks supportingTasks() const;
111 
113  virtual SupportingTasks supportingTasks(int) const;
114 
117  virtual void addSupportingTask(int, const DtSimTaskMessageType&);
118  virtual void addSupportingTasks(int, const SupportingTasks&);
119  virtual void removeSupportingTask(int, const DtSimTaskMessageType&);
120  virtual void removeSupportingTasks(int);
122 
137  virtual bool executeTask(DtTaskMessage& taskMsg, bool clearConflictingTopLevelTasks = true, bool doNotAbandonPlan = false);
138  virtual bool executeTask(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState, bool clearConflictingTopLevelTasks = true, bool doNotAbandonPlan = false);
140 
143  virtual void addBackgroundProcess(const DtString& scriptId, int backgroundProcessId, const DtString& controllerName);
144  virtual void removeBackgroundProcess(const DtString& scriptId);
145 
147  virtual void addScriptedSet(const DtString& scriptId, int backgroundProcessId, const DtString& controllerName);
148  virtual void removeScriptedSet(const DtString& scriptId);
149 
156  virtual bool transitionTask(DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState);
157 
161  virtual int suspendTasks(std::set<DtString> actionCategories);
164  virtual int suspendAllTopLevelTasks(bool suspendedFromTrigger = false);
167  virtual int suspendSubtask(int taskId, int subtaskId);
168 
171  virtual DtSuspendedTaskInfo* suspendTask(int taskId);
172 
174  virtual bool resumeTasks(int suspendId);
175 
177 
178  virtual void addTaskCompleteCallback(DtTaskCompleteCallbackList::DtCallbackFunctionType fcn, void* usr);
179  virtual void removeTaskCompleteCallback(DtTaskCompleteCallbackList::DtCallbackFunctionType fcn, void* usr);
181 
184  virtual bool taskActive(int taskId) const;
185 
187  virtual void registerInterfaceMessageCallbacks();
188 
190  virtual void registerRadioMessageCallbacks();
191 
194  virtual void taskNotify(const DtSimTask & task, const DtSimComponent& notifier,
195  bool clearConflictingTopLevelTasks = true);
196 
200  virtual void skipTask(bool fromSuperior = false);
201 
207  virtual void taskComplete(const DtVrfObjectMessage & radioMsg, bool success, bool affectsIndependentTaskStatus = true);
208 
211  virtual void sendTaskCompleted(const DtTaskMessage& taskMsg, bool success);
212 
215  void awaitingTask(int taskIdJustCompleted = -1);
216 
219  virtual void setTaskedBySuperior();
220 
222  virtual bool requestTaskNeeded() const;
223 
225  virtual void setRequestTaskNeeded(bool requestTaskNeeded);
226 
229  virtual bool independentlyTasked() const;
230 
233  virtual void setIndependentlyTasked(bool independentlyTasked);
234 
237  virtual bool isPseudoAggregate() const { return false; }
238 
241  virtual DtString type() const;
242 
246  virtual void setSendSkipTaskMessages(bool sendSkipTaskMessages);
247  virtual bool sendSkipTaskMessages();
249 
252  virtual void addOnTaskNotifyCallback(
253  DtOnTaskNotifyCallbackFcn fcn, void* userData);
254 
257  virtual void removeOnTaskNotifyCallback(
258  DtOnTaskNotifyCallbackFcn fcn, void* userData);
259 
262  virtual void clearSubtask(int subtaskId);
263 
266  virtual DtTaskWithTaskStateListPtr topLevelTasks() const;
267 
269  virtual bool hasTopLevelTask() const;
270 
273  virtual bool taskTypesAreExclusive(const DtSimTaskMessageType& taskType1, const DtSimTaskMessageType& taskType2) const;
274 
279  virtual bool taskTypesAreExclusive(const std::list<DtString>& task1Categories, const DtSimTaskMessageType& taskType2) const;
280 
282  virtual bool canExecuteTask(const DtSimTaskMessageType&) const;
283 
284  virtual void clearTaskByType(const DtSimTaskMessageType& taskType);
285 
286  virtual void updateTaskInfo();
287 
289  virtual bool canBeExecutedConcurrently(const DtSimTaskMessageType& taskType) const;
290 
293  virtual DtScriptReactiveTaskController* reactiveTaskController();
294  virtual void setReactiveTaskController(DtScriptReactiveTaskController* reactiveTaskController);
295 
298  static void taskedBySuperiorRequestCallback(DtSimMessage * msg, void *
299  usrData);
300 
303  static void skipTaskCallback(DtSimMessage * msg, void * usr);
304 
307  static void clearTaskCallback(DtSimMessage * msg, void * usr);
308 
311  static void taskVisualizationRequestCallback(DtSimMessage * msg, void * usr);
312 
314  virtual void setTaskVisualizationsActive(bool);
315 
316  static DtSimTaskManager * creator(const DtString & name, DtLocalObject* vrfObject);
317 
322  static DtSimTaskManagerFactory * factory();
323  static void setFactory(DtSimTaskManagerFactory * factory);
324 
325  static void addSimTaskManagerCreatorFcn(const DtString & type,
327 
329  static DtSimTaskManager * createTaskManager(const DtString & name,
330  const DtString & type, DtLocalObject* vrfObject);
331 
333  virtual bool hasTopLevelTasks() const;
334 
336  virtual void addClutterTask(const DtSimTaskMessageType& taskType);
337 
339  virtual bool taskVisualizationsEnabled(bool includeUnTimedOut) const;
340 
342  virtual bool taskVisualizationsActivated() const;
343 
346  virtual void taskCancelled(int taskId);
347 
349  virtual bool startTaskExecution(const DtTaskMessage& taskMsg, DtSimTaskStatePtr taskState,
350  bool taskNotify, bool clearConflictingTopLevelTasks = true, bool doNotAbandonPlan = false);
351 
353 
354 protected:
355  virtual void postGetSelf() override;
356 
360  virtual void processClearTask(DtSimMessage * msg);
361 
363  virtual void processTaskVisualizationRequest(DtSimMessage * msg);
364 
365  virtual void resumeTaskTree(DtSuspendedTaskInfo* suspendedTaskInfo, DtTaskControllerComponent* parentTaskCompnent = 0);
366 
369  virtual bool clearAllTopLevelTasks();
370 
374  virtual void clearConflictingTopLevelTasks(const DtSimTaskMessageType& taskType);
375 
378  virtual void onTaskNotify(const DtSimTask & task, const DtSimComponent &
379  notifier);
380 
385  void processSubordinateRemoved(const DtUUID& info);
386 
388  virtual void processSimObjectDeleted(const DtSimObject*);
389 
392  static void taskMessageCallback(DtSimMessage* msg, void* usr);
393 
395  virtual void processTaskMessage(DtSimMessage* msg);
396 
399  virtual DtTaskControllerComponent* findControllerForTask(const DtTaskMessage& taskMessage);
400 
404  virtual std::vector<DtSimTaskMessageType> conflictingTaskTypes(const DtSimTaskMessageType& testTaskType) const;
405 
407  virtual std::list<DtString> taskGroupsForTask(const DtSimTaskMessageType& taskType) const;
408 
409  static void requestCurrentTasksCallback(const DtVrfObjectMessage* msg, void* usr);
410  virtual void processRequestCurrentTasks(const DtVrfObjectMessage* msg);
411 
412  static void unsubscribeCurrentTasksCallback(const DtVrfObjectMessage* msg, void* usr);
413  virtual void processUnsubscribeCurrentTasks(const DtVrfObjectMessage* msg);
414 
415  virtual void sendCurrentTasks();
416  virtual void addSubtasksToCurrentTaskMessage(const DtSuspendedTaskInfoList& subtaskList, int parentTaskId, int status, DtCurrentTasksAdminContent& adminContent);
417 
419  virtual void updateTaskVisualizationList(bool includeTimeout = true);
420 
422  virtual void stopCurrentTaskVisualizations();
423 
424  static void clearTaskByTrackingNumberCallback(const DtVrfObjectMessage* msg, void* usr);
425  virtual void processClearTaskByTrackingNumber(const DtVrfObjectMessage* msg);
426 
427  virtual void processTaskEvent(const makVrfEvents::DtEvent&);
428 
431  virtual void registerSetDataMessageCallbacks();
432  virtual void unregisterSetDataMessageCallbacks();
433 
434  virtual void registerTaskMessageCallbacks();
435  virtual void unregisterTaskMessageCallbacks();
436 
438 
440  virtual void addDefaultClutterTaskTypes();
441 
442 protected:
444 
445  typedef std::multimap<DtSimTaskMessageType, DtTaskControllerComponent*> DtTaskProcessorMap;
446 
447  std::vector<DtOnTaskNotifyCallbackInfo> myOnTaskNotifyCallbacks;
448 
452 
456 
461 
465 
468 
471 
473 
475 
477 
479 
481 
483  {
484  int taskId;
486  };
487 
488  typedef std::map<DtString, BackgroundProcessInformation> BackgroundProcesses;
489 
492 
495 
496  boost::signals2::scoped_connection mySimObjectDeletedConnection;
497  boost::signals2::scoped_connection mySubordinateRemovedConnection;
498 
500  {
501  DelayTaskExecution() : doTaskNotify(false), clearConflictingTopLevelTasks(true), doNotAbandonPlan(false) {};
502  DelayTaskExecution(const DtTaskMessage& msg, DtSimTaskStatePtr ptr, bool d, bool c, bool p)
503  : taskMessage(dynamic_cast<DtTaskMessage*>(msg.clone()))
504  , taskState(ptr)
505  , doTaskNotify(d)
506  , clearConflictingTopLevelTasks(c)
507  , doNotAbandonPlan(p)
508  {
509  }
510 
512  : taskMessage(orig.taskMessage)
513  , taskState(orig.taskState)
514  , doTaskNotify(orig.doTaskNotify)
515  , clearConflictingTopLevelTasks(orig.clearConflictingTopLevelTasks)
516  , doNotAbandonPlan(orig.doNotAbandonPlan)
517  {
518  }
519 
520  std::shared_ptr<DtTaskMessage> taskMessage;
525  };
526 
527  typedef std::vector<DelayTaskExecution> DelayedTaskExecution;
529 
530  std::vector<DtSimTaskMessageType> myClutterTasks;
531 
532  boost::signals2::connection myEventSignalConnection;
533 };
DtTime myTaskVisualizationRemovalTime
Time at which task visualizations should be removed.
Definition: simTaskManager.h:470
UUID is a unique ID wrapper class.
Definition: uuid.h:59
Class Description: DtControllerComponentList.
Definition: controllerComponentList.h:38
std::vector< DelayTaskExecution > DelayedTaskExecution
Definition: simTaskManager.h:527
Container used in callback lists.
Definition: simTaskManager.h:46
std::multimap< DtSimTaskMessageType, DtTaskControllerComponent * > DtTaskProcessorMap
Definition: simTaskManager.h:445
std::map< DtString, BackgroundProcessInformation > BackgroundProcesses
Definition: simTaskManager.h:488
DtSimTaskManager *(* DtSimTaskManagerCreatorFcn)(const DtString &name, DtLocalObject *vrfObject)
Definition: simTaskManagerFactory.h:16
DtSimTaskStatePtr taskState
Definition: simTaskManager.h:521
DtScriptReactiveTaskController * myReactiveTaskController
Definition: simTaskManager.h:474
DtString controllerName
Definition: simTaskManager.h:485
std::vector< DtOnTaskNotifyCallbackInfo > myOnTaskNotifyCallbacks
Definition: simTaskManager.h:447
static DtSimTaskManagerFactory * theFactory
Definition: simTaskManager.h:476
DtRwNLengthStringVector is a named, readable/writable vector of strings of arbitrary length...
Definition: rwNLengthStringVector.h:28
All the information about a single suspended task. This information should be sufficient to resume th...
Definition: suspendedTaskInfo.h:23
bool mySendTasksNextTick
Set to true if the task manager should send the list of current tasks next tick.
Definition: simTaskManager.h:464
virtual void postGetSelf()
Called after either version of getSelf (mtl or environment). Default is no-op.
DelayTaskExecution(const DtTaskMessage &msg, DtSimTaskStatePtr ptr, bool d, bool c, bool p)
Definition: simTaskManager.h:502
Definition: readerWriter.h:85
std::set< DtSimTaskMessageType > SupportingTasks
Definition: simTaskManager.h:69
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:472
std::shared_ptr< DtSimTaskState > DtSimTaskStatePtr
Definition: taskAndTaskStateDefines.h:18
class DtSimTaskManagerFactory:
Definition: simTaskManagerFactory.h:24
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:42
Definition: simTaskManager.h:499
DtLocalObject * myLocalObject
Definition: simTaskManager.h:443
static DtReaderWriterFactory * factory()
boost::signals2::scoped_connection mySubordinateRemovedConnection
Definition: simTaskManager.h:497
DelayedTaskExecution myDelayedTaskExecution
Definition: simTaskManager.h:528
Definition: event.h:13
bool doTaskNotify
Definition: simTaskManager.h:522
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Specialized classes.
Definition: scriptedTaskTask.h:277
DtOnTaskNotifyCallbackFcn myCallbackFunction
Definition: simTaskManager.h:48
File: simMsg.h.
Definition: simMessage.h:35
Description: Readable, Writable int.
Definition: rwInt.h:25
void * myUserData
Definition: simTaskManager.h:49
DtTaskProcessorMap myTaskProcessorMap
Stores all the registered task processor interfaces, indexed by task type they process.
Definition: simTaskManager.h:451
bool mySendSkipTaskMessages
Determines whether processSubordinateRemoved will send a skip task message. This should only be chang...
Definition: simTaskManager.h:455
boost::signals2::scoped_connection mySimObjectDeletedConnection
Definition: simTaskManager.h:496
AvailableSupportingTasks myAvailableSupportingTasks
Definition: simTaskManager.h:480
Define constants for types of tasks, sets, admin messages, reports, and sim commands (all sent via ra...
The base class for all messages to/from a specific DtVrfObject. Various subclasses of this class will...
Definition: vrfObjectMessage.h:30
DtCallbackList< const DtTaskMessage & > DtTaskCompleteCallbackList
Definition: simTaskManager.h:68
Class Description: DtSimTaskManager manages the bookkeeping associated with starting, completing, clearing, and skipping tasks.
Definition: simTaskManager.h:55
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:89
Admin content that is used to send the current tasks status from a specific entity. This message is sent in response to a DtRequstCurrentTasksAdminContent or a subscription to the current task status using the same message. The current task status is a list of all the currently executing top level tasks that an entity has.
Definition: currentTasksAdminContent.h:101
std::shared_ptr< DtTaskMessage > taskMessage
Definition: simTaskManager.h:520
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:80
DtSimTask is an abstract base class from which real tasks can derive. It manages the read/write capab...
Definition: simTask.h:30
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
bool myTaskVisualizationsActive
Definition: simTaskManager.h:493
DtRwInt myNumberOfTaskSubscriptions
Counter which holds the number of times the current task status has been subscribed to minus the numb...
Definition: simTaskManager.h:460
BackgroundProcesses myBackgroundProcesses
Definition: simTaskManager.h:490
const DtReaderWriter & operator=(const DtReaderWriter &orig)
assignment operator
std::map< int, SupportingTasks > AvailableSupportingTasks
Definition: simTaskManager.h:70
int taskId
Definition: simTaskManager.h:484
Definition: simInterfaceContent.h:45
DelayTaskExecution(const DelayTaskExecution &orig)
Definition: simTaskManager.h:511
virtual bool isPseudoAggregate() const
Indicates whether or not the type of task manager created supports pseudo-aggregates.
Definition: simTaskManager.h:237
std::vector< DtSimTaskMessageType > myClutterTasks
Definition: simTaskManager.h:530
bool doNotAbandonPlan
Definition: simTaskManager.h:524
DtRwNLengthStringVector myTaskVisualizationRequestors
Whether task visualizations are enabled for this object.
Definition: simTaskManager.h:467
std::shared_ptr< DtTaskWithTaskStateList > DtTaskWithTaskStateListPtr
Definition: taskAndTaskStateDefines.h:27
BackgroundProcesses myScriptedSets
Definition: simTaskManager.h:491
A DtTaskMsg is a DtRadioMsg with a pointer to a task. The type of the taskMsg is just the type of the...
Definition: taskMessage.h:21
bool clearConflictingTopLevelTasks
Definition: simTaskManager.h:523
DelayTaskExecution()
Definition: simTaskManager.h:501
bool myResumingTasks
Definition: simTaskManager.h:478
bool myFirstTick
Definition: simTaskManager.h:494
boost::signals2::connection myEventSignalConnection
Definition: simTaskManager.h:532
Definition: simTaskManager.h:482
A locally simulated VRF object.
Definition: localObject.h:98
READ ME!
Definition: scriptReactiveTaskController.h:52

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)