VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtAgentManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
15 
16 #include <boost/smart_ptr/detail/atomic_count.hpp>
17 #include <boost/thread/condition.hpp>
18 #include <boost/thread/mutex.hpp>
19 #include <vrvUtil/signalslib.h>
20 #include <boost/unordered_map.hpp>
21 
22 #include <vector>
23 
24 namespace makVrv
25 {
26  class DtAsynchronousAgentManager;
27  class DtCoordinateSystem;
28  class DtDe;
29  class DtMessage;
30  class DtSceneProctor;
31  class DtAgentUpdateResolverInterface;
32  class DtAgent;
33 
39  {
40  public:
41 
43 
46 
48  virtual ~DtAgentManager();
49 
53  virtual void cleanup();
54 
58  virtual void tick();
59 
61  virtual void updateScene(DtMessage& message);
62 
65  virtual DtAgentUpdateResolverInterface* findUpdater(DtUniqueID id);
66 
68  DtElementID findElementId(DtUniqueID id);
69 
73  virtual bool sceneObjectIsVisible(DtElementID id) const;
74 
75  //@name DtAsynchronousAgentManagerInterfaces related functions.
77 
84  virtual DtAsynchronousAgentManager* createAsynchronousManager(const std::string& ownerName);
85 
88  void checkForIgLock(bool forceLock = false);
89 
95  virtual DtDe& acquireLockedIg();
96 
102  virtual void releaseLockedIg();
103 
105 
107  inline DtDe& de()
108  {
109  return myDe;
110  }
111 
115  void clear();
116 
119  boost::signalslib::signal<void (DtUniqueID id)> signal_objectCreated;
120 
121  protected:
122 
130  virtual unsigned char acquireNamespaceId(
131  DtAsynchronousAgentManager* sceneManagerInterface,
132  const std::string& ownerName);
133 
136  virtual void releaseNamespaceId(unsigned char nsId);
137 
141  {
142 
143  public:
144 
146  : message(0)
147  , distribute(false)
148  {
149  }
150 
153 
154  };
155 
156  typedef std::vector<MessageParcel> MessageParcelVector;
157 
163  virtual void addAsynchronousUpdateMessages(MessageParcelVector& messages);
164 
165  typedef std::vector<DtMessage*> MessageList;
166 
169  void distributeAndUpdate( MessageList& masterMessages, MessageList& distributedMessages );
170 
174  virtual void localEncodeAndUpdateScene();
175 
177  virtual void createObject(const std::string& className, DtUniqueID id);
178 
180  virtual void updateObject(DtUniqueID id,DtMessage& msg, unsigned int updatesize);
181 
183  virtual void destroyObject(DtUniqueID id);
184 
185  protected:
186 
187  typedef boost::function< void (DtAgentManagerInterface*) >
189 
193  {
194  //Local copy.
195  std::string name;
196  //Used to pass functions to be executed on the asynchronous interface.
198  };
199 
200  typedef boost::unordered_map<DtUniqueID,AsynchronousInterfaceEntry> NamespaceMap;
201  typedef boost::unordered_map<DtUniqueID,DtAgentUpdateResolverInterface*> UpdaterMap;
202  typedef std::vector<DtAgent*> DriverVector;
203 
204 
206 
208  std::pair<DtUniqueID,DtAgentUpdateResolverInterface*> myLastObjectCache;
213 
214  boost::detail::atomic_count myAtomicWaitingCount;
215  boost::condition myRequestIgCondition;
216  boost::condition myReleaseIgCondition;
217  boost::mutex myMonitor;
218 
219  //Force checking the asynchronous messages.
221 
222  };
223 
227  {
228 
229  public:
231  static DtSceneManagerCreator& instance(DtDe& theIG);
232 
234  static void registerInstance(DtDe& theIG,DtSceneManagerCreator* anInstance);
235 
237  virtual DtAgentManager* create(DtDe&);
238  };
239 
240 }
NamespaceMap myNamespaceMap
Definition: DtAgentManager.h:211
UpdaterMap myUpdaterMap
Definition: DtAgentManager.h:207
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
An asynchronous interface to the scene manager.
Definition: DtAsynchronousAgentManager.h:24
std::vector< DtAgent * > DriverVector
Definition: DtAgentManager.h:202
The IGI Message. Is easily encoded and decoding using stream operators. It also provides validation d...
Definition: DtMessage.h:30
Abstract base class for object updaters.
Definition: DtAgentUpdateResolverInterface.h:20
DtDe & de()
Get the scene manager&#39;s Ig object.
Definition: DtAgentManager.h:107
AsynchronousAgentManagerInterfaceFunctionQueue * asyncFunctionQueue
Definition: DtAgentManager.h:197
Scene Manager creator.
Definition: DtAgentManager.h:226
Contains makVrv::DtLockedBufferedQueue class.
std::pair< DtUniqueID, DtAgentUpdateResolverInterface * > myLastObjectCache
Definition: DtAgentManager.h:208
boost::signalslib::signal< void(DtUniqueID id)> signal_objectCreated
Signal for creation of actual objects (represented by their unique id).
Definition: DtAgentManager.h:119
DtMessage * message
Definition: DtAgentManager.h:152
boost::condition myReleaseIgCondition
Definition: DtAgentManager.h:216
A locked buffered queue which allows multiple writers and a single reader. Internally the queue is st...
Definition: DtLockedBufferedQueue.h:24
Contains makVrv::DtVirtualBaseClass class.
DtLockedBufferedQueue< AgentManagerInterfaceFunction > AsynchronousAgentManagerInterfaceFunctionQueue
Definition: DtAgentManager.h:191
boost::condition myRequestIgCondition
Definition: DtAgentManager.h:215
boost::detail::atomic_count myAtomicWaitingCount
Definition: DtAgentManager.h:214
boost::unordered_map< DtUniqueID, DtAgentUpdateResolverInterface * > UpdaterMap
Definition: DtAgentManager.h:201
bool myForceCheckAysncMessages
Definition: DtAgentManager.h:220
unsigned char myNextValidNamespaceIdGuess
Definition: DtAgentManager.h:212
Helper struct for sending messages via the asynchronous message queue. This holds the message and whe...
Definition: DtAgentManager.h:140
std::string name
Definition: DtAgentManager.h:195
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
DtSceneProctor * mySceneProctor
Definition: DtAgentManager.h:209
The DtAgentManager manages the distributed scene object framework. This includes the objects and upda...
Definition: DtAgentManager.h:38
std::vector< DtMessage * > MessageList
Definition: DtAgentManager.h:165
DtLockedBufferedQueue< MessageParcel > myAsynchronousMessageQueue
Definition: DtAgentManager.h:210
std::vector< MessageParcel > MessageParcelVector
Definition: DtAgentManager.h:156
The abstract interface necessary for agents.
Definition: DtAgentManagerInterface.h:33
boost::unordered_map< DtUniqueID, AsynchronousInterfaceEntry > NamespaceMap
Definition: DtAgentManager.h:200
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
Contains makVrv::DtAgentManagerInterface class.
DtDe & myDe
Definition: DtAgentManager.h:205
boost::function< void(DtAgentManagerInterface *) > AgentManagerInterfaceFunction
Definition: DtAgentManager.h:188
The abstract scene handler defines the abstract IGI interface for controlling the scene...
Definition: DtSceneProctor.h:26
MessageParcel()
Definition: DtAgentManager.h:145
bool distribute
Definition: DtAgentManager.h:151
boost::mutex myMonitor
Definition: DtAgentManager.h:217
Definition: DtAgentManager.h:192

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)