MAK RTIspy API Documentation for HLA 1516
networkMapProcessor.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 2007 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: networkMapProcessor.h,v $ $Revision: 1.4 $ $State: Exp $
00007 *********************************************************************/
00010 
00011 #ifndef DtNetworkMapProcessor_H_
00012 #define DtNetworkMapProcessor_H_
00013 
00014 #include "forwarderNode.h"
00015 #include "routeMap.h"
00016 #include "rtiMsConfig.h"
00017 #include <networkMapReqMsg.h>
00018 #include <networkMapRspMsg.h>
00019 #include <spyXmlDocument.h>
00020 #include <netMapForwarderXmlBlock.h>
00021 
00022 #include <vlutil/vlUtil.h>
00023 #include <vlutil/vlSmartPointers.h>
00024 #include <map>
00025 #include <set>
00026 #include <list>
00027 
00028 class DT_DLL_FORWARDER DtNetworkMapFilter;
00029 
00050 class DT_DLL_FORWARDER DtNetworkMapProcessor
00051 {
00052 public:
00054    typedef bool (DtNetworkMapProcessor::* NetworkMapMsgReqHandlerMemberCb)(
00055       const DtInetAddrAndPort& src, const DtNetworkMapReqMsg& msg  );
00056    typedef bool (DtNetworkMapProcessor::* NetworkMapMsgRspHandlerMemberCb)(
00057       const DtInetAddrAndPort& src, const DtNetworkMapRspMsg& msg  );
00058    typedef bool (DtNetworkMapProcessor::* DestinationProcessingMemberCb)(
00059       const DtInetAddrAndPort& src, DtForwarderPort::DtAddressPortList& destinations );
00060 
00062    typedef void (*NetworkMapRequestCompletedCb)( DtNetworkMapRspMsg& msg, void* usr );
00063    typedef std::list< std::pair< NetworkMapRequestCompletedCb, void* > > RequestCompleteCallbackList;
00064 
00066    DtNetworkMapProcessor( DtBoost::shared_ptr<DtForwarderNode> parent );
00067    
00069    virtual ~DtNetworkMapProcessor();
00070 
00074    virtual bool gotNetworkMapRequest( const DtInetAddrAndPort& src,
00075       const DtNetworkMapReqMsg& msg  );
00076 
00080    virtual bool gotNetworkMapResponse( const DtInetAddrAndPort& src,
00081       const DtNetworkMapRspMsg& msg  );
00082 
00086    virtual void addRequestCompletedCb( NetworkMapRequestCompletedCb fn, void* usr );
00087    virtual void removeRequestCompletedCb( NetworkMapRequestCompletedCb fn, void* usr );
00088 
00091    virtual bool processNetworkMapMsgDestinations ( const DtInetAddrAndPort& src,
00092       DtForwarderPort::DtAddressPortList& destinations );
00093 
00094 public:
00095 
00100    static int lostConnection( const MAKRti::DtString& connName,
00101       unsigned int connID, const DtInetAddrAndPort& addr, void* usr );
00102 
00103 protected:
00104 
00106    struct PendingRequest
00107    {
00108       PendingRequest( bool isLocal, unsigned long requestor,
00109          unsigned long srcId, const DtInetAddrAndPort& srcAddr,
00110          const MAKRti::DtString& localName, unsigned long localId,
00111          const DtInetAddrAndPort& localIp,
00112          const DtRouteMap::DtAddressPortList& expectedOutResponses,
00113          const DtNetMapForwarderXmlBlock::SiblingList& siblings );
00114 
00115       bool requestComplete() const;
00116       void removePendingDestination( const DtInetAddrAndPort& addr );
00117       void setLanResponseRecieved();
00118 
00120       bool                      myIsLocalRequest;
00122       unsigned long             myRequestorId;
00124       unsigned long             mySourceId;
00125       DtInetAddrAndPort         mySourceAddress;
00127       DtRouteMap::DtAddressPortList myPendingOutResponses;
00129       bool                      myLanResponsePending;      
00130 
00132       DtSpyXmlDocument            myXmlResponse;
00133       DtNetMapForwarderXmlBlockSP myXmlNetworkMap;
00134    };
00135 
00136    typedef DtBoost::shared_ptr<PendingRequest> PendingRequestSP;
00137    typedef std::map< unsigned long, PendingRequestSP > RequestorToRequestsMap;
00138    
00139 protected:
00140 
00142    virtual int lostConnection( const MAKRti::DtString& connName,
00143       unsigned int connID, const DtInetAddrAndPort& addr );
00144    
00146    virtual void sendResponseMsg( PendingRequestSP request );
00147 
00150    virtual void sendRequestMsg( PendingRequestSP request );
00151 
00153    virtual bool processInToOutRspMsg( const DtInetAddrAndPort& src,
00154       const DtNetworkMapRspMsg& msg );
00155    
00157    virtual bool processLanToOutRspMsg( const DtInetAddrAndPort& src,
00158       const DtNetworkMapRspMsg& msg );
00159    
00160    
00161 
00162 protected:
00163 
00164    DtBoost::shared_ptr<DtForwarderNode>            myParent;
00165    DtNetworkMapFilter*         myMsgToOutFilter;
00166    
00167    MAKRti::DtString            myNodeName;
00168    unsigned long               myConnId;
00169    DtInetAddrAndPort           myIp;
00170 
00171    DtNetMapForwarderXmlBlock::SiblingList mySiblingForwarders;
00172 
00174    RequestCompleteCallbackList myCompletedRequestCallbacks;
00175 
00177    RequestorToRequestsMap      myPendingRequests;
00178 
00179 
00180 };
00181 
00182 #endif //! DtNetworkMapProcessor_H_
00183 

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)