MAK RTIspy API Documentation for HLA 1.3
forwarderNode.h
Go to the documentation of this file.
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 

Document ID: Generated on Thu Jun 14 14:15:04 EDT 2012 from SVN revision 116116
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)