MAK RTIspy API Documentation for HLA Evolved
forwarderNode.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2005 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 /*******************************************************************************
6 ** $RCSfile: forwarderNode.h,v $ $Revision: 1.14 $ $State: Exp $
7 *******************************************************************************/
10 
11 #ifndef DtForwarderNode_H_
12 #define DtForwarderNode_H_
13 
14 #include "forwarderPort.h"
15 #include "messageProcessor.h"
16 #include "rtiMsConfig.h"
17 
18 #include <vlutil/vlConfig.h>
19 #include <vlutil/vlUtil.h>
20 #include <vlutil/vlTime.h>
21 #include <metadata.h>
22 
23 
24 class DtRIDParameters;
25 class DtRouteMap;
27 class DtRtiMsg;
28 
29 
30 typedef void (*DtTickCbFn)(void* usr);
31 
32 
35 {
36 public:
37  DtTickCallbackInfo(DtTickCbFn fn, void* data, MAKRti::DtTime interval) :
38  myData(data), myFn(fn), myInterval(interval), myNextExecutionTime(0) {}
39 
40  bool operator<(const DtTickCallbackInfo& other) const
41  {
42  return ( myData < other.myData ||
43  myData == other.myData && myFn < other.myFn );
44  }
45 
46  void* myData;
48  MAKRti::DtTime myInterval;
49  MAKRti::DtTime myNextExecutionTime;
50 };
51 
53 #define DtForwarderIntfcIn 0x01
54 #define DtForwarderIntfcOut 0x02
55 #define DtForwarderIntfcLan 0x04
56 
97 
99 {
100 public:
101 
104 
105 protected:
106 
109  DtForwarderNode( const DtRIDParameters* params,
110  DtForwarderMessageProcessor* toOutProcessor,
111  DtForwarderMessageProcessor* toLanProcessor,
112  int forwarderPort,
113  const MAKRti::DtInetAddr& forwarderAddrToConnectTo,
114  bool writeToPipeWhenReady );
115 
116 public:
117 
118  virtual ~DtForwarderNode();
119 
124  virtual int tick( double maxTime = 0.0f );
125 
126 
129  virtual void addTickCallback(DtTickCbFn fn, void* usr, MAKRti::DtTime interval );
130  virtual void removeTickCallback(DtTickCbFn fn, void* usr );
131 
133  virtual inline bool ready() const;
134 
136  virtual inline const DtRIDParameters* params() const;
137 
139  virtual inline DtBoost::shared_ptr<DtRouteMap> routeMap() const;
140 
142  virtual inline DtForwarderPort* inPort() const;
143  virtual inline DtForwarderPort* lanPort() const;
144  virtual inline DtForwarderPort* outPort() const;
145 
147  virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams );
148 
150  virtual unsigned long localNodeId() const;
151 
154  const DtInetAddrAndPort& localNodeAddress() const;
155 
157  virtual MAKRti::DtString localNodeName() const;
158 
160  virtual void processInToLanMsg( DtForwarderPort::DtAddressMsgPair& msg );
161 
163  virtual void processInToOutMsg( DtForwarderPort::DtAddressMsgPair& msg );
164 
166  virtual void processLanToOutMsg( DtForwarderPort::DtAddressMsgPair& msg );
167 
169  virtual void sendToLanPort( DtForwarderPort::DtAddressMsgPair& msg );
170 
172  virtual void sendToOutPort( DtForwarderPort::DtAddressMsgPair& msg );
173 
175  virtual void sendToOutPort( DtForwarderPort::DtAddressMsgPair& msg,
176  const DtRouteMap::DtAddressPortList& destinations );
177 
180  virtual void registerOutPortProcessor( DtForwarderMessageProcessor::Filter* processor );
181  virtual void unregisterOutPortProcessor( DtForwarderMessageProcessor::Filter* processor );
182 
184  virtual void registerLanPortProcessor( DtForwarderMessageProcessor::Filter* processor );
185  virtual void unregisterLanPortProcessor( DtForwarderMessageProcessor::Filter* processor );
186 
189  virtual void packageAndSendReliable( DtRtiMsg& msg, unsigned int sendViaIntfc );
190  virtual void packageAndSendReliable( DtRtiMsg& msg, unsigned int sendViaIntfc,
191  const DtRouteMap::DtAddressPortList& destinations );
192 
194  virtual void setMetadataControl( DtMetadataType type, bool onOff );
195  virtual bool isMetadataEnabled( DtMetadataType type );
196 
198  virtual void lanPortListenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr );
199  virtual void lanPortDropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr );
200 
203  virtual bool lanPortUpdateFederateConnectionId( unsigned long orig,
204  unsigned long final );
205 
209  virtual DtInetAddrAndPort nextForwarderOnRoute( const DtInetAddrAndPort& target );
210  virtual DtInetAddrAndPort nextForwarderOnRoute( const MAKRti::DtString& targetGroupName );
211 
213  virtual DtInetAddrAndPort rootForwarder();
214 
217  virtual DtInetAddrAndPort nextHopToExec();
218 
220  virtual void abortPendingConnections();
221 
223  virtual unsigned int abortedConnections();
224 
226  virtual bool connectionInformation(
227  unsigned int& numForwarderToForwarderConns,
228  std::vector<MAKRti::DtString>& forwarderIdentifiers,
229  std::vector<MAKRti::DtString>& forwarderConnectionHostNames,
230  std::vector<DtInetAddrAndPort>& forwarderConnectionAddrs,
231  unsigned int& numForwarderExecConns,
232  unsigned int& numForwarderClientConns,
233  std::vector<MAKRti::DtString>& clientConnectionHostNames,
234  std::vector<MAKRti::DtInetAddr>& clientConnectionAddrs);
235 
239  void continueWithoutUnconnectedFws();
240 
241 public:
242 
244  typedef DtForwarderNode* (*DtForwarderNodeCreatorFcn)( const DtRIDParameters*,
247  int forwarderPort,
248  MAKRti::DtInetAddr forwarderAddrToConnectTo,
249  bool writeToPipeWhenReady );
250 
252  static DtForwarderNode* create( const DtRIDParameters* params,
253  DtForwarderMessageProcessor* toOutProcessor,
254  DtForwarderMessageProcessor* toLanProcessor,
255  int forwarderPort,
256  MAKRti::DtInetAddr forwarderAddrToConnectTo,
257  bool writeToPipeWhenReady );
258 
262  static void setCreatorFunction( DtForwarderNodeCreatorFcn creator );
263 
265  static int newInPortConnection( const MAKRti::DtString& connName, unsigned int connID,
266  const DtInetAddrAndPort& connAddr, void* usr );
267  static int newOutPortConnection( const MAKRti::DtString& connName, unsigned int connID,
268  const DtInetAddrAndPort& connAddr, void* usr );
269  static int lostInPortConnection( const MAKRti::DtString& connName, unsigned int connID,
270  const DtInetAddrAndPort& connAddr, void* usr );
271  static int lostOutPortConnection( const MAKRti::DtString& connName, unsigned int connID,
272  const DtInetAddrAndPort& connAddr, void* usr );
273  static void inOutForwarderPortReady( unsigned long forwarderNodeId, void* usr);
274 
275 
276 protected:
277 
279  DtForwarderNode();
280  DtForwarderNode( const DtForwarderNode& orig );
281  DtForwarderNode& operator=( const DtForwarderNode& orig );
282 
283 
285  int refreshConnections();
286 
288  void writeMessageToPipe( const MAKRti::DtString& msg );
289 
291  int newInPortConnection( const MAKRti::DtString& connName,
292  unsigned int connID, const DtInetAddrAndPort& connAddr );
293  int newOutPortConnection( const MAKRti::DtString& connName,
294  unsigned int connID, const DtInetAddrAndPort& connAddr );
295  int lostInPortConnection( const MAKRti::DtString& connName,
296  unsigned int connID, const DtInetAddrAndPort& connAddr );
297  int lostOutPortConnection( const MAKRti::DtString& connName,
298  unsigned int connID, const DtInetAddrAndPort& connAddr );
299  void inOutForwarderPortReady(unsigned long forwarderNodeId);
300 
301 
302 protected:
303 
306 
311 
314 
316  DtClock myClock;
317 
319  bool myIsReady;
320 
323  DtBoost::shared_ptr<DtRouteMap> myRoutes;
324 
327 
330 
334 
337 
343 
346 
348  static const MAKRti::DtInetAddr theFirstHostInetAddr;
349 
351  std::list<DtTickCallbackInfo> myTickCallbacks;
352 
353 protected:
354 
355  static DtForwarderNodeCreatorFcn theCreator;
356 
357 };
358 
359 
360 inline bool DtForwarderNode::ready() const
361 {
362  return myIsReady;
363 }
364 
366 {
367  return myParams;
368 }
369 
370 inline DtBoost::shared_ptr<DtRouteMap> DtForwarderNode::routeMap() const
371 {
372  return myRoutes;
373 }
374 
376 {
377  return myRemoteInputPort;
378 }
379 
381 {
382  return myLocalPort;
383 }
384 
386 {
387  return myRemoteOutputPort;
388 }
389 
391 {
392  return (outPort()->pendingConnectionsAborted() + lanPort()->pendingConnectionsAborted());
393 }
394 
395 #endif
396 
397 

Document ID: Generated on Tue May 7 16:26:47 EDT 2013 from SVN revision 126903
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)