11 #ifndef DtForwarderPort_H_
12 #define DtForwarderPort_H_
18 #include <vlutil/vlConfig.h>
19 #include <vlutil/vlUtil.h>
20 #include <vlutil/vlSelectParamW.h>
21 #include <vlutil/vlFedTarget.h>
22 #include <vlutil/vlInetAddr.h>
41 const DtBoost::shared_ptr<DtRouteMap>,
42 const MAKRti::DtInetAddr&, int,
const MAKRti::DtInetEndpoint& );
61 typedef int (*DtConnectionAddRemoveCb)(
const MAKRti::DtString&,
62 const MAKRti::DtString&,
unsigned int,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>&,
void*);
63 typedef int(*DtConnectionReconnectBegunCb)(
const MAKRti::DtString&,
65 typedef int(*DtConnectionReconnectCompleteCb)(
const MAKRti::DtString&,
67 typedef int (*DtConnectionChangeCb)(
const MAKRti::DtString& ,
68 const MAKRti::DtString&,
unsigned int,
unsigned int,
const DtInetAddrAndPort&,
void*);
69 typedef void (*DtFederateAddedCb)(
const MAKRti::DtString&,
70 const MAKRti::DtString&,
const MAKRti::DtString&,
unsigned int,
72 unsigned int,
const MAKRti::DtString&,
const MAKRti::DtString&,
74 typedef void (*DtFederateRemovedCb)(
const MAKRti::DtString&,
75 const MAKRti::DtString&,
unsigned int,
unsigned int,
77 typedef void (*DtPortReadyCb)(
unsigned long,
void*);
78 typedef int (*DtExecAddChangeCb)(
const MAKRti::DtString&,
unsigned int,
80 typedef int (*DtExecRemovedChangeCb)(
const MAKRti::DtString&,
unsigned int,
82 typedef int (*DtSocketQueueCb)(
unsigned int, int,
void*);
85 typedef void (*DtNotWaitingForFwsCb)(
void*);
101 MAKRti::DtInetAddr host,
int forwarderPort, MAKRti::DtInetEndpoint addnlConnection ) :
102 myParams( params ), myRoutes( routes ), myAddress( host ), myOk( true ),
103 myPortToUse(forwarderPort), myAdditionalAddrToConnectTo(addnlConnection)
110 virtual bool isOk()
const {
return myOk; }
113 virtual bool isReady()
const = 0;
116 virtual DtAddressMsgPair getNextMsg() = 0;
119 virtual void sendByTransport(
const DtForwarderMsg& msg )
const = 0;
122 virtual void sendToAllReliable(
const DtForwarderMsg& msg )
const = 0;
126 virtual void sendToListReliable(
const DtForwarderMsg& msg,
130 virtual inline bool flush();
133 virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams ) = 0;
136 virtual void updateRoutes() = 0;
143 virtual void clearNeededConnections() = 0;
146 virtual unsigned int abortPendingConnections() = 0;
149 virtual unsigned int pendingConnectionsAborted() = 0;
152 virtual DtAddressPortList connections()
const = 0;
156 virtual void listenToMulticastGroup(
const MAKRti::DtInetAddr& mcastAddr ) = 0;
157 virtual void dropMulticastGroup(
const MAKRti::DtInetAddr& mcastAddr ) = 0;
161 virtual bool updateFederateConnectionId(
unsigned long orig,
162 unsigned long final ) = 0;
166 virtual inline void addConnectionEstablishedCb( DtConnectionAddRemoveCb callback,
void* usr );
167 virtual inline void removeConnectionEstablishedCb( DtConnectionAddRemoveCb callback,
void* usr );
168 virtual inline void addConnectionLostCb( DtConnectionAddRemoveCb callback,
void* usr );
169 virtual inline void removeConnectionLostCb( DtConnectionAddRemoveCb callback,
void* usr );
170 virtual inline void addConnectionChangedCb( DtConnectionChangeCb callback,
void* usr );
171 virtual inline void removeConnectionChangedCb( DtConnectionChangeCb callback,
void* usr );
173 virtual inline void addReconnectBegun(DtConnectionReconnectBegunCb callback,
void* usr);
174 virtual inline void removeReconnectBegun(DtConnectionReconnectBegunCb callback,
void* usr);
175 virtual inline void addReconnectComplete(DtConnectionReconnectCompleteCb callback,
void* usr);
176 virtual inline void removeReconnectComplete(DtConnectionReconnectCompleteCb callback,
void* usr);
181 virtual inline void addForwarderPortReadyCb( DtPortReadyCb callback,
void* usr );
182 virtual inline void removeForwarderPortReadyCb( DtPortReadyCb callback,
void* usr );
187 virtual inline void addFederateJoinedCb( DtFederateAddedCb callback,
void* usr );
188 virtual inline void removeFederateJoinedCb( DtFederateAddedCb callback,
void* usr );
189 virtual inline void addFederateResignedCb( DtFederateRemovedCb callback,
void* usr );
190 virtual inline void removeFederateResignedCb( DtFederateRemovedCb callback,
void* usr );
195 virtual inline void addSocketQueueCb( DtSocketQueueCb callback,
void* usr );
196 virtual inline void removeSocketQueueCb( DtSocketQueueCb callback,
void* usr );
202 virtual inline void addWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback,
void* usr);
203 virtual inline void removeWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback,
void* usr);
204 virtual inline void addNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback,
void* usr);
205 virtual inline void removeNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback,
void* usr);
210 virtual inline void addExecConnectionEstablishedCb(DtExecAddChangeCb callback,
void* usr);
211 virtual inline void removeExecConnectionEstablishedCb(DtExecAddChangeCb callback,
void * usr);
212 virtual inline void addExecDisconnectedCb(DtExecRemovedChangeCb callback,
void* usr);
213 virtual inline void removeExecDisconnectedCb(DtExecRemovedChangeCb callback,
void* usr);
220 virtual void setForwarderId(
unsigned long id);
225 virtual int execConnected(
const MAKRti::DtString& connName,
226 unsigned int connID,
const DtInetAddrAndPort& addr,
const MAKRti::DtString& hostName,
227 bool fullyCompliant);
228 virtual int execDisconnected(
const MAKRti::DtString& connName,
237 virtual inline int connectionEstablished(
const MAKRti::DtString& connName,
238 const MAKRti::DtString& hostName,
unsigned int connID,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr);
239 virtual inline int connectionLost(
const MAKRti::DtString& connName,
240 const MAKRti::DtString& hostName,
unsigned int connID,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr);
241 virtual inline int connectionChanged(
const MAKRti::DtString& connName,
242 const MAKRti::DtString& hostName,
unsigned int oldConnID,
unsigned int newConnID,
const DtInetAddrAndPort& addr );
243 inline int reconnectBegun(
const MAKRti::DtString& connName,
244 const MAKRti::DtString& hostName,
unsigned int connID,
const DtInetAddrAndPort& addr);
245 inline int reconnectComplete(
const MAKRti::DtString& connName,
246 const MAKRti::DtString& hostName,
unsigned int connID,
const DtInetAddrAndPort& addr,
bool wasSuccessful);
251 virtual void forwarderNodeIsReady(
unsigned long id);
255 virtual int socketQueueStatus(
unsigned int connId,
int connQueueStatus );
261 virtual void waitingForForwarderConnections(
const DtConnAndNameMap& allNeededFws,
262 const DtConnAndNameMap& stillNeededFws);
266 virtual void notWaitingForForwarderConnections();
271 virtual void federateResigned(
const MAKRti::DtString& connName,
272 const MAKRti::DtString& connType,
unsigned int connID,
274 virtual void federateJoined(
const MAKRti::DtString& connName,
275 const MAKRti::DtString& connType,
276 const MAKRti::DtString& federationName,
unsigned int connID,
278 const MAKRti::DtString& hostName,
unsigned int processId,
279 const MAKRti::DtString& processName,
287 static int connectionEstablished(
const MAKRti::DtString& connName,
288 const MAKRti::DtString& hostName,
unsigned int connID,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr,
void* usr);
289 static int connectionLost(
const MAKRti::DtString& connName,
290 const MAKRti::DtString& hostName,
unsigned int connID,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr,
void* usr);
291 static int connectionChanged(
const MAKRti::DtString& connName,
292 const MAKRti::DtString& hostName,
unsigned int oldConnID,
unsigned int newConnID,
298 static void federateJoined(
const MAKRti::DtString& connName,
299 const MAKRti::DtString& connType,
300 const MAKRti::DtString& federationName,
unsigned int connID,
302 const MAKRti::DtString& hostName,
unsigned int processId,
303 const MAKRti::DtString& processName,
const MAKRti::DtString& commandArgs,
305 static void federateResigned(
const MAKRti::DtString& connName,
306 const MAKRti::DtString& connType,
unsigned int connID,
312 static int execConnected(
const MAKRti::DtString& connName,
314 const MAKRti::DtString& hostName,
bool fullyCompliant,
void* usr);
315 static int execDisconnected(
const MAKRti::DtString& connName,
320 static int socketQueueStatus(
unsigned int connId,
int connQueueStatus,
324 static void forwarderNodeIsReady(
unsigned long id,
void* usr);
366 std::pair<DtConnectionAddRemoveCb, void*> cbPair( callback, usr );
384 const MAKRti::DtString& hostName,
unsigned int connID,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr)
390 if (-1 == ( *iter->first )( connName, hostName, connID, addr, iter->second ))
401 std::pair<DtConnectionAddRemoveCb, void*> cbPair( callback, usr );
418 const MAKRti::DtString& hostName,
unsigned int connID,
const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr)
424 if ( -1 == ( *iter->first )( connName, hostName, connID, addr, iter->second ) )
432 const MAKRti::DtString& hostName,
unsigned int connID,
const DtInetAddrAndPort& addr)
438 if (-1 == (*iter->first)(connName, hostName, connID, addr, iter->second))
446 const MAKRti::DtString& hostName,
unsigned int connID,
const DtInetAddrAndPort& addr,
bool wasSuccessful)
452 if (-1 == (*iter->first)(connName, hostName, connID, addr, wasSuccessful, iter->second))
462 std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr );
481 std::pair<DtConnectionReconnectBegunCb, void*> cbPair(callback, usr);
482 DtConnectionReconnectBegunCallbackList::iterator pos = std::find(
myReconnectBegunCbs.begin(),
491 DtConnectionReconnectBegunCallbackList::iterator pos = std::find(
myReconnectBegunCbs.begin(),
498 std::pair<DtConnectionReconnectCompleteCb, void*> cbPair(callback, usr);
514 const MAKRti::DtString& hostName,
unsigned int oldConnID,
unsigned int newConnID,
521 if (-1 == ( *iter->first )( connName, hostName, oldConnID, newConnID, addr, iter->second ))
532 std::pair<DtFederateRemovedCb, void*> cbPair( callback, usr );
551 std::pair< DtSocketQueueCb, void* > cbPair( callback, usr );
553 DtSocketQueueCallbackList::iterator pos = std::find(
mySocketQueueCbs.begin(),
562 DtSocketQueueCallbackList::iterator pos = std::find(
mySocketQueueCbs.begin(),
575 ( *iter->first )( connName, connType, connID, fedHandle, addr, iter->second );
582 ((
DtForwarderPort*)usr)->federateResigned(connName, connType, connID, fedHandle, addr);
588 std::pair<DtPortReadyCb, void*> cbPair( callback, usr );
589 DtPortReadyCallbackList::iterator pos = std::find(
myPortReadyCbs.begin(),
599 DtPortReadyCallbackList::iterator pos = std::find(
myPortReadyCbs.begin(),
607 return (static_cast<DtForwarderPort*>(usr))->forwarderNodeIsReady(
id);
612 for ( DtPortReadyCallbackList::iterator iter =
myPortReadyCbs.begin();
615 ( *iter->first )(
id, iter->second);
624 std::pair<DtFederateAddedCb, void*> cbPair( callback, usr );
641 const MAKRti::DtString& connType,
642 const MAKRti::DtString& federationName,
644 unsigned int fedHandle,
646 const MAKRti::DtString& hostName,
647 unsigned int processId,
648 const MAKRti::DtString& processName,
649 const MAKRti::DtString& commandArgs,
655 ( *iter->first )( connName, connType, federationName, connID, fedHandle,
656 addr, hostName, processId, processName, commandArgs, hlaVersion,
662 const MAKRti::DtString& connType,
663 const MAKRti::DtString& federationName,
665 unsigned int fedHandle,
667 const MAKRti::DtString& hostName,
668 unsigned int processId,
669 const MAKRti::DtString& processName,
670 const MAKRti::DtString& commandArgs,
674 ((
DtForwarderPort*)usr)->federateJoined(connName, connType, federationName,
675 connID, fedHandle, addr, hostName, processId, processName, commandArgs,
681 const MAKRti::DtString& hostName,
683 const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr,
686 return ((
DtForwarderPort*)usr)->connectionEstablished(connName, hostName, connID, addr);
690 const MAKRti::DtString& hostName,
692 const std::pair<DtInetAddrAndPort, DtInetAddrAndPort>& addr,
695 return ((
DtForwarderPort*)usr)->connectionLost(connName, hostName, connID, addr);
699 const MAKRti::DtString& hostName,
unsigned int oldConnID,
unsigned int newConnID,
703 return ((
DtForwarderPort*)usr)->connectionChanged(connName, hostName, oldConnID, newConnID, addr);
709 std::pair<DtExecAddChangeCb, void*> cbPair( callback, usr );
731 const MAKRti::DtString& hostName,
732 bool fullyCompliant,
void* usr)
734 return ((
DtForwarderPort*)usr)->execConnected(connName, connID, addr, hostName, fullyCompliant);
740 const MAKRti::DtString& hostName,
741 bool fullyCompliant )
747 if ( -1 == ( *iter->first )( connName, connID, addr, hostName, fullyCompliant, iter->second ) )
759 std::pair<DtExecRemovedChangeCb, void*> cbPair( callback, usr );
781 return ((
DtForwarderPort*)usr)->execDisconnected(connName, connID, addr);
791 if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) )
802 std::pair< DtWaitingForFwsCb, void* > cbPair( callback, usr );
830 ( *iter->first )( allNeededFws, stillNeededFws, iter->second );
837 std::pair< DtNotWaitingForFwsCb, void* > cbPair( callback, usr );
864 ( *iter->first )( iter->second );
870 return ((
DtForwarderPort*)usr)->socketQueueStatus( connId, connQueueStatus );
880 if( -1 == ( *iter->first )( connId, connQueueStatus, iter->second ) )