![]() |
MAK RTIspy API Documentation for HLA 1516
|
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