MAK RTIspy API Documentation for HLA 1516
extendedRtiMsgForwarder.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002  ** Copyright (c) 2005 MaK Technologies, Inc.
00003  ** All rights reserved.
00004  *******************************************************************************/
00005 /*******************************************************************************
00006  ** $RCSfile: extendedRtiMsgForwarder.h,v $ $Revision: 1.7 $ $State: Exp $
00007  *******************************************************************************/
00010 
00011 #ifndef DtExtendedRtiMsgForwarder_H_
00012 #define DtExtendedRtiMsgForwarder_H_
00013 
00014 #include "forwarderPort.h"
00015 #include "rtiMsConfig.h"
00016 #include "rtiMessageForwarder.h"
00017 #include "vlThreadedObject.h"
00018 #include <vlutil/vlRunnable.h>
00019 #include "vlThreadSafeQueue.h"
00020 #include "vlThreadSafeBufferQueue.h"
00021 #include <vlutil/vlTime.h>
00022 #include <udpMsgSocket.h>
00023 #include <set>
00024 
00025 class DtRIDParameters;
00026 class DtMessageBufferFilter;
00027 class DtFederateTrackingFilter;
00028 class DtNetworkMapLanRequestFilter;
00029 
00030 class DT_DLL_FORWARDER DtExtendedRtiMsgForwarder : public DtRtiMsgForwarder
00031 {
00032 protected:
00033 
00035    DtExtendedRtiMsgForwarder( unsigned long id, const DtRIDParameters& params, bool postMessagesToParent = true );
00036 
00037 public:
00038 
00039    typedef DtThreadSafeBufferQueue<char> DtCharBufferQueue;
00040 
00045    static DtExtendedRtiMsgForwarder* create( unsigned int id, const DtRIDParameters& params, bool postMessagesToParent = true );
00046 
00048    virtual ~DtExtendedRtiMsgForwarder();
00049 
00052    virtual void applyFilters();
00053 
00055    virtual void sendByTransport( const DtForwarderPort::DtForwarderMsg& msg );
00056    
00058    virtual void sendToAllReliable( const DtForwarderPort::DtForwarderMsg& msg );   
00059 
00061    virtual void sendBestEffort( const DtForwarderPort::DtForwarderMsg& msg );   
00062 
00065    virtual void sendMessageToWan( const DtRtiMsg& msg );
00066 
00069    virtual inline bool flush();
00070 
00073    virtual const DtCharBufferQueue::Buffer* getNextMsg();
00074 
00077    virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams );
00078 
00080    virtual DtForwarderPort::DtAddressPortList newConnections() const;
00081    
00083    virtual DtForwarderPort::DtAddressPortList droppedConnections() const;
00084    
00086    virtual DtForwarderPort::DtAddressPortList connections() const;
00087 
00089    virtual void listenToMulticastGroup( const MAKRti::DtInetAddr& mcastAddr );
00090    virtual void dropMulticastGroup( const MAKRti::DtInetAddr& mcastAddr );
00091 
00092 
00094    virtual void federateJoined(const MAKRti::DtString&, const MAKRti::DtString&,
00095       const MAKRti::DtString&,
00096       unsigned int, unsigned int, const DtInetAddrAndPort&,
00097       const MAKRti::DtString&, unsigned int, const MAKRti::DtString&,
00098       const MAKRti::DtString&, DtHlaVersionId);
00099    virtual void federateResigned(const MAKRti::DtString&,
00100       const MAKRti::DtString&, unsigned int, unsigned int,
00101       const DtInetAddrAndPort&  );
00102    virtual void updateSocketQueueStatus( unsigned int connId, int connQueueStatus);
00103 
00104    virtual void addFederateJoinedCb( 
00105       DtForwarderPort::DtFederateAddedCb callback, void* usr );
00106    virtual void addFederateResignedCb( 
00107       DtForwarderPort::DtFederateRemovedCb callback, void* usr ) ;
00108 
00109    virtual void addSocketAdditionCb(
00110       DtForwarderPort::DtConnectionChangeCb cb, void* usr );
00111    virtual void addSocketRemovalCb(
00112       DtForwarderPort::DtConnectionChangeCb cb, void* usr );
00113 
00114    virtual void addSocketQueueCb(
00115        DtForwarderPort::DtSocketQueueCb cb, void* usr );
00116 
00118    virtual void addExecConnectionEstablishedCb( 
00119       DtForwarderPort::DtExecAddChangeCb callback, void* usr );
00120    virtual void removeExecConnectionEstablishedCb( 
00121       DtForwarderPort::DtExecAddChangeCb callback, void* usr );
00122 
00124    virtual void addExecConnectionLostCb( 
00125       DtForwarderPort::DtExecRemovedChangeCb callback, void* usr );
00126    virtual void removeExecConnectionLostCb( 
00127       DtForwarderPort::DtExecRemovedChangeCb callback, void* usr );
00128 
00129    virtual const DtFederateTrackingFilter* fedHandleTrackingFilter() const { return myFedHandleTracker; }
00130 
00131    
00132 protected:
00133 
00135    virtual void init();
00136 
00138    virtual void tcpSocketAdditionCb(DtTcpMsgSocket* sock);
00139    virtual void tcpSocketRemovalCb(DtTcpMsgSocket* sock);
00140 
00147    virtual void refreshConnectionList() const;
00148 
00149 public:
00150    
00152    static const unsigned int theForwarderId;
00153 
00154 protected:
00155 
00156    typedef std::pair< DtInetAddrAndPort, int > DtAddressAndSockIdPair;
00157 
00158    DtUdpMsgSocket* myUdpRcvSocket;
00159    DtUdpMsgSocket* myUdpSendSocket;
00160 
00161    std::auto_ptr<DtCharBufferQueue::Buffer> myLastReceivedMsg;
00162    DtCharBufferQueue myInMsgQueue;
00163    DtCharBufferQueue myOutMsgQueue;
00164    DtMessageBufferFilter* myOutMsgFilter;
00165    DtNetworkMapLanRequestFilter* myNetMapRequestFilter;
00166    DtFederateTrackingFilter*   myFedHandleTracker;
00167 
00169    DtClock myClock;
00170 
00172    MAKRti::DtTime myLastDiscoveryTickTime;
00173 
00174    DtForwarderPort::DtFederateAddedCallbackList myFederateJoinedCbs;
00175    DtForwarderPort::DtFederateRemovedCallbackList myFederateResignedCbs;
00176 
00177    DtForwarderPort::DtSocketQueueCallbackList mySocketQueueCbs;
00178 
00179    DtForwarderPort::DtCallbackList mySocketAddedCbs;
00180    DtForwarderPort::DtCallbackList mySocketRemovedCbs;
00181 
00186    typedef std::pair< bool, DtAddressAndSockIdPair > DtBoolAddressSocketIdPair;
00187    mutable DtThreadSafeQueue< DtBoolAddressSocketIdPair > mySocketListChanges;
00188    mutable std::set< DtAddressAndSockIdPair > myConnections;
00189    mutable DtForwarderPort::DtAddressPortList myNewConnections;
00190    mutable DtForwarderPort::DtAddressPortList myDroppedConnections;
00191 
00192 
00195    bool myForwardMessagesToParent;
00196 };
00197 
00198 inline bool DtExtendedRtiMsgForwarder::flush()
00199 {
00200    bool status = true;
00204    if ( myUdpSendSocket->isOpen() )
00205    {
00206       status = myUdpSendSocket->flush();
00207    }
00208 
00209    return status;
00210 }
00211 #endif //! DtExtendedRtiMsgForwarder
00212 

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)