![]() |
MAK RTIspy API Documentation for HLA 1.3
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: forwarderNode.h,v $ $Revision: 1.14 $ $State: Exp $ 00007 *******************************************************************************/ 00010 00011 #ifndef DtForwarderNode_H_ 00012 #define DtForwarderNode_H_ 00013 00014 #include "forwarderPort.h" 00015 #include "messageProcessor.h" 00016 #include "rtiMsConfig.h" 00017 00018 #include <vlutil/vlConfig.h> 00019 #include <vlutil/vlUtil.h> 00020 #include <vlutil/vlTime.h> 00021 #include <metadata.h> 00022 00023 00024 class DtRIDParameters; 00025 class DtRouteMap; 00026 class DtForwarderFaultProcessor; 00027 class DtRtiMsg; 00028 00029 00030 typedef void (*DtTickCbFn)(void* usr); 00031 00032 00034 class DtTickCallbackInfo 00035 { 00036 public: 00037 DtTickCallbackInfo(DtTickCbFn fn, void* data, MAKRti::DtTime interval) : 00038 myData(data), myFn(fn), myInterval(interval), myNextExecutionTime(0) {} 00039 00040 bool operator<(const DtTickCallbackInfo& other) const 00041 { 00042 return ( myData < other.myData || 00043 myData == other.myData && myFn < other.myFn ); 00044 } 00045 00046 void* myData; 00047 DtTickCbFn myFn; 00048 MAKRti::DtTime myInterval; 00049 MAKRti::DtTime myNextExecutionTime; 00050 }; 00051 00053 #define DtForwarderIntfcIn 0x01 00054 #define DtForwarderIntfcOut 0x02 00055 #define DtForwarderIntfcLan 0x04 00056 00097 00098 class DT_DLL_FORWARDER DtForwarderNode 00099 { 00100 public: 00101 00102 typedef DtMessageProcessor< DtInetAddrAndPort, DtForwarderPort::DtForwarderMsg > 00103 DtForwarderMessageProcessor; 00104 00105 protected: 00106 00109 DtForwarderNode( const DtRIDParameters* params, 00110 DtForwarderMessageProcessor* toOutProcessor, 00111 DtForwarderMessageProcessor* toLanProcessor, 00112 int forwarderPort, 00113 const MAKRti::DtInetAddr& forwarderAddrToConnectTo, 00114 bool writeToPipeWhenReady ); 00115 00116 public: 00117 00118 virtual ~DtForwarderNode(); 00119 00124 virtual int tick( double maxTime = 0.0f ); 00125 00126 00129 virtual void addTickCallback(DtTickCbFn fn, void* usr, MAKRti::DtTime interval ); 00130 virtual void removeTickCallback(DtTickCbFn fn, void* usr ); 00131 00133 virtual inline bool ready() const; 00134 00136 virtual inline const DtRIDParameters* params() const; 00137 00139 virtual inline DtBoost::shared_ptr<DtRouteMap> routeMap() const; 00140 00142 virtual inline DtForwarderPort* inPort() const; 00143 virtual inline DtForwarderPort* lanPort() const; 00144 virtual inline DtForwarderPort* outPort() const; 00145 00147 virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams ); 00148 00150 virtual unsigned long localNodeId() const; 00151 00154 const DtInetAddrAndPort& localNodeAddress() const; 00155 00157 virtual MAKRti::DtString localNodeName() const; 00158 00160 virtual void processInToLanMsg( DtForwarderPort::DtAddressMsgPair& msg ); 00161 00163 virtual void processInToOutMsg( DtForwarderPort::DtAddressMsgPair& msg ); 00164 00166 virtual void processLanToOutMsg( DtForwarderPort::DtAddressMsgPair& msg ); 00167 00169 virtual void sendToLanPort( DtForwarderPort::DtAddressMsgPair& msg ); 00170 00172 virtual void sendToOutPort( DtForwarderPort::DtAddressMsgPair& msg ); 00173 00175 virtual void sendToOutPort( DtForwarderPort::DtAddressMsgPair& msg, 00176 const DtRouteMap::DtAddressPortList& destinations ); 00177 00180 virtual void registerOutPortProcessor( DtForwarderMessageProcessor::Filter* processor ); 00181 virtual void unregisterOutPortProcessor( DtForwarderMessageProcessor::Filter* processor ); 00182 00184 virtual void registerLanPortProcessor( DtForwarderMessageProcessor::Filter* processor ); 00185 virtual void unregisterLanPortProcessor( DtForwarderMessageProcessor::Filter* processor ); 00186 00189 virtual void packageAndSendReliable( DtRtiMsg& msg, unsigned int sendViaIntfc ); 00190 virtual void packageAndSendReliable( DtRtiMsg& msg, unsigned int sendViaIntfc, 00191 const DtRouteMap::DtAddressPortList& destinations ); 00192 00194 virtual void setMetadataControl( DtMetadataType type, bool onOff ); 00195 virtual bool isMetadataEnabled( DtMetadataType type ); 00196 00198 virtual void lanPortListenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ); 00199 virtual void lanPortDropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ); 00200 00203 virtual bool lanPortUpdateFederateConnectionId( unsigned long orig, 00204 unsigned long final ); 00205 00209 virtual DtInetAddrAndPort nextForwarderOnRoute( const DtInetAddrAndPort& target ); 00210 virtual DtInetAddrAndPort nextForwarderOnRoute( const MAKRti::DtString& targetGroupName ); 00211 00213 virtual DtInetAddrAndPort rootForwarder(); 00214 00217 virtual DtInetAddrAndPort nextHopToExec(); 00218 00220 virtual void abortPendingConnections(); 00221 00223 virtual unsigned int abortedConnections(); 00224 00226 virtual bool connectionInformation( 00227 unsigned int& numForwarderToForwarderConns, 00228 std::vector<MAKRti::DtString>& forwarderIdentifiers, 00229 std::vector<MAKRti::DtString>& forwarderConnectionHostNames, 00230 std::vector<DtInetAddrAndPort>& forwarderConnectionAddrs, 00231 unsigned int& numForwarderExecConns, 00232 unsigned int& numForwarderClientConns, 00233 std::vector<MAKRti::DtString>& clientConnectionHostNames, 00234 std::vector<MAKRti::DtInetAddr>& clientConnectionAddrs); 00235 00239 void continueWithoutUnconnectedFws(); 00240 00241 public: 00242 00244 typedef DtForwarderNode* (*DtForwarderNodeCreatorFcn)( const DtRIDParameters*, 00245 DtForwarderMessageProcessor*, 00246 DtForwarderMessageProcessor*, 00247 int forwarderPort, 00248 MAKRti::DtInetAddr forwarderAddrToConnectTo, 00249 bool writeToPipeWhenReady ); 00250 00252 static DtForwarderNode* create( const DtRIDParameters* params, 00253 DtForwarderMessageProcessor* toOutProcessor, 00254 DtForwarderMessageProcessor* toLanProcessor, 00255 int forwarderPort, 00256 MAKRti::DtInetAddr forwarderAddrToConnectTo, 00257 bool writeToPipeWhenReady ); 00258 00262 static void setCreatorFunction( DtForwarderNodeCreatorFcn creator ); 00263 00265 static int newInPortConnection( const MAKRti::DtString& connName, unsigned int connID, 00266 const DtInetAddrAndPort& connAddr, void* usr ); 00267 static int newOutPortConnection( const MAKRti::DtString& connName, unsigned int connID, 00268 const DtInetAddrAndPort& connAddr, void* usr ); 00269 static int lostInPortConnection( const MAKRti::DtString& connName, unsigned int connID, 00270 const DtInetAddrAndPort& connAddr, void* usr ); 00271 static int lostOutPortConnection( const MAKRti::DtString& connName, unsigned int connID, 00272 const DtInetAddrAndPort& connAddr, void* usr ); 00273 static void inOutForwarderPortReady( unsigned long forwarderNodeId, void* usr); 00274 00275 00276 protected: 00277 00279 DtForwarderNode(); 00280 DtForwarderNode( const DtForwarderNode& orig ); 00281 DtForwarderNode& operator=( const DtForwarderNode& orig ); 00282 00283 00285 int refreshConnections(); 00286 00288 void writeMessageToPipe( const MAKRti::DtString& msg ); 00289 00291 int newInPortConnection( const MAKRti::DtString& connName, 00292 unsigned int connID, const DtInetAddrAndPort& connAddr ); 00293 int newOutPortConnection( const MAKRti::DtString& connName, 00294 unsigned int connID, const DtInetAddrAndPort& connAddr ); 00295 int lostInPortConnection( const MAKRti::DtString& connName, 00296 unsigned int connID, const DtInetAddrAndPort& connAddr ); 00297 int lostOutPortConnection( const MAKRti::DtString& connName, 00298 unsigned int connID, const DtInetAddrAndPort& connAddr ); 00299 void inOutForwarderPortReady(unsigned long forwarderNodeId); 00300 00301 00302 protected: 00303 00305 const DtRIDParameters* myParams; 00306 00309 DtForwarderMessageProcessor* myToOutMsgProcessor; 00310 DtForwarderMessageProcessor* myToLanMsgProcessor; 00311 00313 DtForwarderFaultProcessor* myFaultProcessor; 00314 00316 DtClock myClock; 00317 00319 bool myIsReady; 00320 00323 DtBoost::shared_ptr<DtRouteMap> myRoutes; 00324 00326 DtForwarderPort* myRemoteInputPort; 00327 00329 DtForwarderPort* myRemoteOutputPort; 00330 00333 DtForwarderPort* myLocalPort; 00334 00336 DtInetAddrAndPort myLocalNodeAddress; 00337 00339 bool myAddTcpDestinationListMetadata; 00340 bool myAddUdpDestinationListMetadata; 00341 bool myAddTransportTypeMetadata; 00342 bool myAddMcastMetadata; 00343 00345 bool myWriteToPipeWhenReady; 00346 00348 static const MAKRti::DtInetAddr theFirstHostInetAddr; 00349 00351 std::list<DtTickCallbackInfo> myTickCallbacks; 00352 00353 protected: 00354 00355 static DtForwarderNodeCreatorFcn theCreator; 00356 00357 }; 00358 00359 00360 inline bool DtForwarderNode::ready() const 00361 { 00362 return myIsReady; 00363 } 00364 00365 inline const DtRIDParameters* DtForwarderNode::params() const 00366 { 00367 return myParams; 00368 } 00369 00370 inline DtBoost::shared_ptr<DtRouteMap> DtForwarderNode::routeMap() const 00371 { 00372 return myRoutes; 00373 } 00374 00375 inline DtForwarderPort* DtForwarderNode::inPort() const 00376 { 00377 return myRemoteInputPort; 00378 } 00379 00380 inline DtForwarderPort* DtForwarderNode::lanPort() const 00381 { 00382 return myLocalPort; 00383 } 00384 00385 inline DtForwarderPort* DtForwarderNode::outPort() const 00386 { 00387 return myRemoteOutputPort; 00388 } 00389 00390 inline unsigned int DtForwarderNode::abortedConnections() 00391 { 00392 return (outPort()->pendingConnectionsAborted() + lanPort()->pendingConnectionsAborted()); 00393 } 00394 00395 #endif //! DtForwarderNode_H_ 00396 00397