MAK RTIspy API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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;
29 
30 
31 typedef void (*DtTickCbFn)(void* usr);
32 
33 
36 {
37 public:
38  DtTickCallbackInfo(DtTickCbFn fn, void* data, MAKRti::DtTime interval) :
39  myData(data), myFn(fn), myInterval(interval), myNextExecutionTime(0) {}
40 
41  bool operator<(const DtTickCallbackInfo& other) const
42  {
43  return ( myData < other.myData ||
44  myData == other.myData && myFn < other.myFn );
45  }
46 
47  void* myData;
49  MAKRti::DtTime myInterval;
50  MAKRti::DtTime myNextExecutionTime;
51 };
52 
54 #define DtForwarderIntfcIn 0x01
55 #define DtForwarderIntfcOut 0x02
56 #define DtForwarderIntfcLan 0x04
57 
98 
100 {
101 public:
102 
105 
106 protected:
107 
110  DtForwarderNode( const DtRIDParameters* params,
111  DtForwarderMessageProcessor* toOutProcessor,
112  DtForwarderMessageProcessor* toLanProcessor,
113  int forwarderPort,
114  const MAKRti::DtInetEndpoint& forwarderAddrToConnectTo,
115  bool writeToPipeWhenReady );
116 
117 public:
118 
119  virtual ~DtForwarderNode();
120 
125  virtual int tick( double maxTime = 0.0f );
126 
127 
130  virtual void addTickCallback(DtTickCbFn fn, void* usr, MAKRti::DtTime interval );
131  virtual void removeTickCallback(DtTickCbFn fn, void* usr );
132 
134  virtual inline bool ready() const;
135 
137  virtual inline const DtRIDParameters* params() const;
138 
140  virtual inline DtBoost::shared_ptr<DtRouteMap> routeMap() const;
141 
143  virtual inline DtForwarderPort* inPort() const;
144  virtual inline DtForwarderPort* lanPort() const;
145  virtual inline DtForwarderPort* outPort() const;
146 
148  virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams );
149 
151  virtual unsigned long localNodeId() const;
152 
155  const DtInetAddrAndPort& localNodeAddress() const;
156 
158  virtual MAKRti::DtString localNodeName() const;
159 
161  virtual MAKRti::DtString localNodeHostName() const;
162 
164  virtual void processInToLanMsg( DtForwarderPort::DtAddressMsgPair& msg );
165 
167  virtual void processInToOutMsg( DtForwarderPort::DtAddressMsgPair& msg );
168 
170  virtual void processLanToOutMsg( DtForwarderPort::DtAddressMsgPair& msg );
171 
173  virtual void sendToLanPort( DtForwarderPort::DtAddressMsgPair& msg );
174 
176  virtual void sendToOutPort( DtForwarderPort::DtAddressMsgPair& msg );
177 
179  virtual void sendToOutPort( DtForwarderPort::DtAddressMsgPair& msg,
180  const DtRouteMap::DtAddressPortList& destinations );
181 
184  virtual void registerOutPortProcessor( DtForwarderMessageProcessor::Filter* processor );
185  virtual void unregisterOutPortProcessor( DtForwarderMessageProcessor::Filter* processor );
186 
188  virtual void registerLanPortProcessor( DtForwarderMessageProcessor::Filter* processor );
189  virtual void unregisterLanPortProcessor( DtForwarderMessageProcessor::Filter* processor );
190 
193  virtual void packageAndSendReliable( DtRtiMsg& msg, unsigned int sendViaIntfc );
194  virtual void packageAndSendReliable( DtRtiMsg& msg, unsigned int sendViaIntfc,
195  const DtRouteMap::DtAddressPortList& destinations );
196 
198  virtual void setMetadataControl( DtMetadataType type, bool onOff );
199  virtual bool isMetadataEnabled( DtMetadataType type );
200 
202  virtual void lanPortListenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr );
203  virtual void lanPortDropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr );
204 
207  virtual bool lanPortUpdateFederateConnectionId( unsigned long orig,
208  unsigned long final );
209 
213  virtual DtInetAddrAndPort nextForwarderOnRoute( const DtInetAddrAndPort& target );
214  virtual DtInetAddrAndPort nextForwarderOnRoute( const MAKRti::DtString& targetGroupName );
215 
217  virtual DtInetAddrAndPort rootForwarder();
218 
221  virtual DtInetAddrAndPort nextHopToExec();
222 
224  virtual void abortPendingConnections();
225 
227  virtual unsigned int abortedConnections();
228 
230  virtual bool connectionInformation(
231  unsigned int& numForwarderToForwarderConns,
232  std::vector<MAKRti::DtString>& forwarderIdentifiers,
233  std::vector<MAKRti::DtString>& forwarderConnectionHostNames,
234  std::vector<DtInetAddrAndPort>& forwarderConnectionAddrs,
235  unsigned int& numForwarderExecConns,
236  unsigned int& numForwarderClientConns,
237  std::vector<MAKRti::DtString>& clientConnectionHostNames,
238  std::vector<MAKRti::DtInetAddr>& clientConnectionAddrs);
239 
243  virtual void continueWithoutUnconnectedFws();
244 
246  virtual void connectForwarder(const DtString& host, const MAKRti::DtInetAddr& ipAddress, int port);
247 
249 
250  static int forwarderToForwarderConnectionChanged(
251  const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
252  unsigned int oldConnID, unsigned int newConnID,
253  const DtInetAddrAndPort& connAddr, void* usr );
254  virtual int forwarderToForwarderConnectionChanged(
255  const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
256  unsigned int oldConnID, unsigned int newConnID, const DtInetAddrAndPort& connAddr );
258 
259 public:
260 
262  typedef DtForwarderNode* (*DtForwarderNodeCreatorFcn)( const DtRIDParameters*,
265  int forwarderPort,
266  MAKRti::DtInetEndpoint forwarderAddrToConnectTo,
267  bool writeToPipeWhenReady );
268 
270  static DtForwarderNode* create( const DtRIDParameters* params,
271  DtForwarderMessageProcessor* toOutProcessor,
272  DtForwarderMessageProcessor* toLanProcessor,
273  int forwarderPort,
274  MAKRti::DtInetEndpoint forwarderAddrToConnectTo,
275  bool writeToPipeWhenReady );
276 
280  static void setCreatorFunction( DtForwarderNodeCreatorFcn creator );
281 
283  static int newInPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
284  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr, void* usr);
285  static int newOutPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
286  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr, void* usr);
287  static int lostInPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
288  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr, void* usr);
289  static int lostOutPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
290  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr, void* usr);
291  static void inOutForwarderPortReady( unsigned long forwarderNodeId, void* usr);
292 
293 
294 protected:
295 
297  DtForwarderNode();
298  DtForwarderNode( const DtForwarderNode& orig );
299  DtForwarderNode& operator=( const DtForwarderNode& orig );
300 
301 
303  int refreshConnections();
304 
306  void writeMessageToPipe( const MAKRti::DtString& msg );
307 
309  int newInPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
310  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr);
311  int newOutPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
312  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr);
313  int lostInPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
314  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr);
315  int lostOutPortConnection( const MAKRti::DtString& connName, const MAKRti::DtString& hostName,
316  unsigned int connID, const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& connAddr);
317  void inOutForwarderPortReady(unsigned long forwarderNodeId);
318 
319 
320 protected:
321 
324 
329 
332 
334  DtClock myClock;
335 
337  bool myIsReady;
338 
341  DtBoost::shared_ptr<DtRouteMap> myRoutes;
342 
345 
348 
351 
355 
358 
364 
367 
369  static const MAKRti::DtInetAddr theFirstHostInetAddr;
370 
372  std::list<DtTickCallbackInfo> myTickCallbacks;
373 
374 protected:
375 
376  static DtForwarderNodeCreatorFcn theCreator;
377 
378 };
379 
380 
381 inline bool DtForwarderNode::ready() const
382 {
383  return myIsReady;
384 }
385 
387 {
388  return myParams;
389 }
390 
391 inline DtBoost::shared_ptr<DtRouteMap> DtForwarderNode::routeMap() const
392 {
393  return myRoutes;
394 }
395 
397 {
398  return myRemoteInputPort;
399 }
400 
402 {
403  return myLocalPort;
404 }
405 
407 {
408  return myRemoteOutputPort;
409 }
410 
412 {
413  return (outPort()->pendingConnectionsAborted() + lanPort()->pendingConnectionsAborted());
414 }
415 
416 #endif
417 
418 
virtual Boolean tick(TickTime minimum, TickTime maximum)
The DtForwarderPort is an Abstract Base Class which provides the interface to a collection of connect...
Definition: inOutForwarderPort.h:33
DtMessageProcessor< DtInetAddrAndPort, DtForwarderPort::DtForwarderMsg > DtForwarderMessageProcessor
Definition: forwarderNode.h:104
User-defined Message Processing Function Object.
Definition: messageProcessor.h:31
std::pair< MAKRti::DtInetAddr, int > DtInetAddrAndPort
Definition: rtiUtil.h:147
The DtForwarderNode class defines a 3-way message distribution architecture for building forwarding n...
Definition: forwarderNode.h:99
enum DtMetadataTypes_e DtMetadataType
static const MAKRti::DtInetAddr theFirstHostInetAddr
Definition: forwarderNode.h:369
The DtForwarderPort is an Abstract Base Class which provides the interface to a collection of connect...
Definition: forwarderPort.h:35
Info for tick callbacks.
Definition: exec.h:87
This class manages the RTI&#39;s start-up configuration using both MTL variables and functions.
Definition: RIDparams.h:87
DtInetAddrAndPort myLocalNodeAddress
IP address and port of the local node.
Definition: forwarderNode.h:357
std::list< DtTickCallbackInfo > myTickCallbacks
List of tick callbacks.
Definition: forwarderNode.h:372
bool myAddTcpDestinationListMetadata
Metadata control indicators.
Definition: forwarderNode.h:360
bool myWriteToPipeWhenReady
Whether the forwarder should write to the pipe once it is ready.
Definition: forwarderNode.h:366
The DtForwarderFaultProcessor class provides connection fault processing to the Forwarder Node...
Definition: forwarderFaultProcessor.h:36
This file contains the declaration of the DtRtiMetadata class which provides a framework for subclass...
void * myData
Definition: exec.h:99
bool myAddUdpDestinationListMetadata
Definition: forwarderNode.h:361
bool operator<(const DtTickCallbackInfo &other) const
Definition: forwarderNode.h:41
DtForwarderPort * myRemoteInputPort
IN Port - incoming message path from other DtForwarderNodes.
Definition: forwarderNode.h:344
virtual DtForwarderPort * outPort() const
Definition: forwarderNode.h:406
DtTickCallbackInfo(DtTickCbFn fn, void *data, MAKRti::DtTime interval)
Definition: forwarderNode.h:38
DtTime myNextExecutionTime
Definition: exec.h:102
const DtRIDParameters * myParams
RID file configuration.
Definition: forwarderNode.h:323
virtual unsigned int abortedConnections()
Get the count of failed/aborted connection attempts.
Definition: forwarderNode.h:411
void(* DtTickCbFn)(void *usr)
Tick callback function signatures.
Definition: exec.h:69
virtual bool ready() const
Is the forwarder fully connected and actively forwarding?
Definition: forwarderNode.h:381
bool myAddTransportTypeMetadata
Definition: forwarderNode.h:362
std::pair< DtInetAddrAndPort, DtForwarderMsg > DtAddressMsgPair
Definition: forwarderPort.h:56
DtRtiMsg is the base class for messages between RTI components.
Definition: rtiMsg.h:45
MAKRti::DtTime myInterval
Definition: forwarderNode.h:49
static DtForwarderNodeCreatorFcn theCreator
Definition: forwarderNode.h:376
DtForwarderMessageProcessor * myToLanMsgProcessor
Definition: forwarderNode.h:328
Definition: routeMap.h:41
virtual DtForwarderPort * inPort() const
Get a pointer to the IN/OUT/LAN port.
Definition: forwarderNode.h:396
DtBoost::shared_ptr< DtRouteMap > myRoutes
Routing file configuration Keep this variable before myLocalPort in the class declaration!! ...
Definition: forwarderNode.h:341
bool myAddMcastMetadata
Definition: forwarderNode.h:363
MAKRti::DtTime myNextExecutionTime
Definition: forwarderNode.h:50
DtTime myInterval
Definition: exec.h:101
virtual DtForwarderPort * lanPort() const
Definition: forwarderNode.h:401
DtTickCbFn myFn
Definition: exec.h:100
virtual DtBoost::shared_ptr< DtRouteMap > routeMap() const
Get the Route Map.
Definition: forwarderNode.h:391
DtForwarderPort * myLocalPort
LAN Port - bidirectional message path to/from local message sources/sinks Keep this variable after my...
Definition: forwarderNode.h:354
DtForwarderMessageProcessor * myToOutMsgProcessor
Outgoing message processors allow user defined operations to be performed on messages before sending ...
Definition: forwarderNode.h:327
virtual const DtRIDParameters * params() const
Get the RID parameters object.
Definition: forwarderNode.h:386
The DtMessageProcessor template class allows user to register simple message processing function obje...
Definition: messageProcessor.h:24
#define DT_DLL_FORWARDER
Definition: rtiMsConfig.h:124
DtForwarderPort * myRemoteOutputPort
OUT Port - outgoing message path to other DtForwarderNodes.
Definition: forwarderNode.h:347
DtClock myClock
A clock used for basic timing.
Definition: forwarderNode.h:334
DtForwarderFaultProcessor * myFaultProcessor
Fault handler.
Definition: forwarderNode.h:331
std::vector< DtInetAddrAndPort > DtAddressPortList
Definition: routeMap.h:59
bool myIsReady
Is the Forwarder in a &quot;Good&quot; state and ready to forward?
Definition: forwarderNode.h:337
DtInOutForwarderPort * myRemoteInOutPort
In/Out port used by default for both in and out.
Definition: forwarderNode.h:350

Document ID: Generated on Thu May 11 15:55:32 EDT 2023 from SVN revision 254743
Copyright © 2005-2020 MAK Technologies Inc. All Rights Reserved (www.mak.com)