MAK RTIspy API Documentation for HLA 1.3
inOutForwarderPort.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2005 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: inOutForwarderPort.h,v $ $Revision: 1.18 $ $State: Exp $
00007 *******************************************************************************/
00010 
00011 #ifndef DtInOutForwarderPort_H_
00012 #define DtInOutForwarderPort_H_
00013 
00014 #include "forwarderPort.h"
00015 #include "routeMap.h"
00016 #include "rtiMsConfig.h"
00017 #include "peerToPeerSockMgr.h"
00018 #include <vlutil/vlTime.h>
00019 #include <udpMsgSocket.h>
00020 #include <map>
00021 
00022 class DtRIDParameters;
00023 class DtRouteMap;
00024 class DtTcpSocketMgr__vl__;
00025 class DtForwarderNodeInfoMsg;
00026 class DtMacAddrMsg;
00027 
00032 class DT_DLL_FORWARDER DtInOutForwarderPort : public DtForwarderPort
00033 {
00034 
00035 protected:
00036 
00038    DtInOutForwarderPort( const DtRIDParameters* params,
00039       DtBoost::shared_ptr<DtRouteMap> routes,
00040       const MAKRti::DtInetAddr& host,
00041       int forwarderPort,
00042       const MAKRti::DtInetAddr& forwarderAddrToConnectTo  );
00043 
00044 public:
00045 
00046    virtual ~DtInOutForwarderPort();
00047 
00049    virtual bool isReady() const;
00050 
00052    virtual DtAddressMsgPair getNextMsg();
00053 
00055    virtual bool getInitializationMsgs( DtForwarderPort::DtSocketSet& socks,
00056       std::list<DtAddressMsgPair>& msgs, bool printBeDestMetadata);
00057 
00059    virtual bool getInitializationMsg( DtMsgSocket* sock,
00060       DtAddressMsgPair& msg, bool printBeDestMetadata);
00061 
00063    virtual void sendByTransport( const DtForwarderMsg& msg ) const;
00064 
00066    virtual void sendToAllReliable( const DtForwarderMsg& msg ) const;
00067 
00070    virtual void sendToListReliable( const DtForwarderMsg& msg,
00071       const DtAddressPortList& destinations ) const;
00072 
00074    virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams );
00075 
00077    virtual void updateRoutes();
00078 
00079    // Retrieve and process initialization messages if necessary.
00080    virtual void processInitializationMessages();
00081 
00084    virtual int checkConnectionStatus( const DtInetAddrAndPort* target = 0 );
00085 
00087    virtual void clearNeededConnections();
00088 
00090    virtual unsigned int abortPendingConnections();
00091 
00093    virtual unsigned int pendingConnectionsAborted();
00094 
00096    virtual DtAddressPortList connections() const;
00097    
00099    virtual void listenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ){};
00100    virtual void dropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr ){};
00101 
00103    virtual bool updateFederateConnectionId( unsigned long orig, 
00104                                             unsigned long final );
00105 
00107    virtual bool flush();   
00108    
00110    virtual bool flushOnly();
00111    
00113    virtual MAKRti::DtString connectionListToString( const char* separator = " : " ) const;
00114 
00115    virtual bool populateConnectionInformation(
00116       unsigned int& numForwarderToForwarderConns,
00117       std::vector<MAKRti::DtString>& forwarderIdentifiers,
00118       std::vector<MAKRti::DtString>& forwarderConnectionHostNames,
00119       std::vector<DtInetAddrAndPort>& forwarderConnectionAddrs) const;
00120 
00121 public:
00122 
00124    static DtForwarderPort* create( const DtRIDParameters* params,
00125       const DtBoost::shared_ptr<DtRouteMap> routes,
00126       const MAKRti::DtInetAddr& host, int forwarderPort,
00127       const MAKRti::DtInetAddr& additionalForwarderToConnectTo );
00128 
00132    static void setCreatorFunction( DtForwarderPortCreatorFcn creator );
00133 
00134 
00136    static void socketAdditionCb( DtTcpMsgSocket* sock, void* usr );
00137    virtual void socketAdditionCb( DtTcpMsgSocket* sock );
00138 
00140    virtual void sendMacAddrMsg( DtTcpMsgSocket* sock );
00141 
00143    virtual void sendPortMsg( DtTcpMsgSocket* sock );
00144 
00146    static void socketEstablishedCb( DtTcpMsgSocket* sock, void* usr );
00147    virtual void socketEstablishedCb( DtTcpMsgSocket* sock );
00148 
00150    static void socketRemovalCb( DtTcpMsgSocket* sock, void* usr );
00151    virtual void socketRemovalCb( DtTcpMsgSocket* sock );
00152 
00153    virtual void processForwarderNodeInfoMsg(const DtForwarderPort::DtAddressMsgPair& msg);   
00154    virtual void processMacAddrMsg(const DtForwarderPort::DtAddressMsgPair& msg);
00155 
00158    virtual void processPortMsg(const DtForwarderPort::DtAddressMsgPair& msgPair);
00159 
00160    void sendForwarderNodeInfoMsg( DtTcpMsgSocket* sock );
00161    void sendForwarderNodeInfoMsg();
00162 
00163 protected:
00164 
00166    virtual void initializeConnections();
00167 
00169    virtual bool connectToPeer( const DtInetAddrAndPort& addrToConnectTo );
00170  
00172    virtual int processLostConnection( DtTcpMsgSocket* sock );
00173 
00176    void connectionCompleted( const DtInetAddrAndPort& addrAndPort,
00177       DtTcpMsgSocket* sock );
00178 
00179 
00181    void addSocketUsingRoutesFile(DtTcpMsgSocket* sock,
00182       const DtInetAddrAndPort& addrAndPort);
00183 
00186    bool addSocketDynamically(DtTcpMsgSocket* sock);
00187 
00188    //Store / remove connection and update dependencies.
00189    void addConnection( const DtInetAddrAndPort& newConn, DtTcpMsgSocket* sock );
00190    void removeConnection( DtAddrToConnMap::iterator pos );
00191 
00192 protected:
00193 
00195    DtInOutForwarderPort();
00196    DtInOutForwarderPort( const DtInOutForwarderPort& orig );
00197    DtInOutForwarderPort& operator=( const DtInOutForwarderPort& orig );
00198 
00200    bool removeFromPendingList( DtTcpMsgSocket* addr );
00201 
00203    void becomeRootForwarderNode();
00204 
00205 protected:
00206 
00207 
00208    bool                                             myIsReady;
00209    DtPeerToPeerTcpSockMgr*                          myConnectionMgr;
00210    DtForwarderPort::DtAddrToConnMap                 myConnections;   
00211    DtForwarderPort::DtAddrToConnMap::const_iterator myNextConnection;
00212    DtForwarderPort::DtAddrToConnMap::const_iterator myLastConnection;
00213 
00214    std::map<DtInetAddrAndPort, DtTcpMsgSocket*>     myAddrToSockMap;
00215 
00217    DtForwarderPort::DtSocketSet                     myPendingConnections;
00218    DtForwarderPort::DtSocketSet                     myPrePendingConnections;
00219    DtForwarderPort::DtSocketSet                     myPostPendingConnections;
00220    DtForwarderPort::DtSocketSet                     myUnknownPortConnections;
00221 
00223    std::map<DtInetAddrAndPort, DtString>            myNeededConnections;
00224 
00226    std::map<DtInetAddrAndPort, DtString>            myStillNeededConnections;
00227 
00230    std::map<DtInetAddrAndPort, DtInetAddrAndPort>   myUsedToListeningMap;
00231 
00232 
00233    DtForwarderPort::DtSocketList                    myInitiatedConnections;
00234    DtForwarderPort::DtSocketSet                     myExpiredConnections;
00235    DtForwarderPort::DtSocketSet                     myDiscardedRemoteSockets;
00236 
00237    DtUdpMsgSocket*                                  myLegacyUdpConnection;
00238    std::map<DtInetAddrAndPort, unsigned long long>  myMacAddrsOfConnectedForwardersMap;
00239    bool                                             myIsRootForwarderNode;
00240 
00241    MAKRti::DtClock                                  myClock;
00242    mutable std::map< DtTcpMsgSocket*, MAKRti::DtTime > mySktSendTimeMap;
00243 
00245    MAKRti::DtInetDevice myHostIf;
00246 
00247    int myCompressionLevel;
00248 
00249 protected:
00250 
00251    static DtForwarderPortCreatorFcn theCreator;
00252 
00253 };
00254 
00255 inline bool DtInOutForwarderPort::updateFederateConnectionId( unsigned long orig, 
00256                                                               unsigned long final )
00257 {
00259    return false;
00260 }
00261 
00262 #endif //! DtInOutForwarderPort_H_
00263 

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)