![]() |
MAK RTIspy API Documentation for HLA Evolved
|
00001 /********************************************************************* 00002 ** Copyright (c) 2005 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: forwarderPingProcessor.h,v $ $Revision: 1.4 $ $State: Exp $ 00007 *********************************************************************/ 00010 00011 #ifndef DtForwarderPingProcessor_H_ 00012 #define DtForwarderPingProcessor_H_ 00013 00014 #include "forwarderNode.h" 00015 #include "forwarderPingMsg.h" 00016 #include "routeMap.h" 00017 #include "rtiMsConfig.h" 00018 00019 #include <vlutil/vlUtil.h> 00020 #include <map> 00021 #include <set> 00022 00023 class DtForwarderPingFilter; 00024 class DtRtiExecDisconnectFilter; 00025 00033 class DT_DLL_FORWARDER DtForwarderPingProcessor 00034 { 00035 public: 00037 typedef bool (DtForwarderPingProcessor::* PingMsgHandlerMemberCb)( 00038 const DtInetAddrAndPort& src, const DtForwarderPingMsg& msg ); 00039 typedef bool (DtForwarderPingProcessor::* DestinationProcessingMemberCb)( 00040 const DtInetAddrAndPort& src, DtForwarderPort::DtAddressPortList& destinations ); 00041 00043 DtForwarderPingProcessor( DtBoost::shared_ptr<DtForwarderNode> parent ); 00044 00046 virtual ~DtForwarderPingProcessor(); 00047 00049 virtual bool gotMsgToLanPort( const DtInetAddrAndPort& src, 00050 const DtForwarderPingMsg& msg ); 00051 00053 virtual bool gotMsgToOutPort( const DtInetAddrAndPort& src, 00054 const DtForwarderPingMsg& msg ); 00055 00058 virtual bool processPingMsgDestinations ( const DtInetAddrAndPort& src, 00059 DtForwarderPort::DtAddressPortList& destinations ); 00060 00064 virtual bool ignorePingMsgToLan ( const DtInetAddrAndPort& src, 00065 DtForwarderPort::DtAddressPortList& destinations ); 00066 00067 public: 00068 00070 static int lostConnection( const MAKRti::DtString& connName, 00071 unsigned int connID, const DtInetAddrAndPort& connAddr, void* usr ); 00072 00073 protected: 00074 00076 virtual int lostConnection( const MAKRti::DtString& connName, 00077 unsigned int connID, const DtInetAddrAndPort& connAddr ); 00078 00081 virtual void sendResponseMsg( unsigned long target, 00082 DtForwarderPingMsg::DtPingStatus status, 00083 const DtInetAddrAndPort* addr = 0 ); 00084 00086 virtual bool processInToOutMsg( const DtInetAddrAndPort& src, 00087 const DtForwarderPingMsg& msg ); 00088 00090 virtual bool processLanToOutMsg( const DtInetAddrAndPort& src, 00091 const DtForwarderPingMsg& msg ); 00092 00093 00094 protected: 00095 00097 class PendingRequest 00098 { 00099 public: 00100 PendingRequest() : 00101 currentStatus( DtForwarderPingMsg::PingResponseNotFound ), 00102 destinationId( 0 ), 00103 sourceAddress(), 00104 pendingOutResponses() {} 00105 00106 PendingRequest( const DtInetAddrAndPort& src, unsigned int destId, 00107 const DtRouteMap::DtAddressPortList& expectedOutResponses ) : 00108 currentStatus( DtForwarderPingMsg::PingResponseNotFound ), 00109 destinationId( destId ), 00110 sourceAddress( src ), 00111 pendingOutResponses( expectedOutResponses ) {} 00112 00113 DtForwarderPingMsg::DtPingStatus currentStatus; 00114 unsigned int destinationId; 00115 DtInetAddrAndPort sourceAddress; 00116 DtRouteMap::DtAddressPortList pendingOutResponses; 00117 }; 00118 00119 typedef std::map< unsigned long, PendingRequest > DtDestToRequestMap; 00120 00121 protected: 00122 00123 DtBoost::shared_ptr<DtForwarderNode> myParent; 00124 DtForwarderPingFilter* myMsgToLanFilter; 00125 DtForwarderPingFilter* myMsgToOutFilter; 00126 00128 DtDestToRequestMap myPendingRequests; 00129 00130 }; 00131 00132 #endif //! DtForwarderPingProcessor_H_ 00133