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::DtInetAddr& );
61 typedef int (*DtConnectionChangeCb)(
const MAKRti::DtString&,
unsigned int,
63 typedef void (*DtFederateAddedCb)(
const MAKRti::DtString&,
64 const MAKRti::DtString&,
const MAKRti::DtString&,
unsigned int,
66 unsigned int,
const MAKRti::DtString&,
const MAKRti::DtString&,
68 typedef void (*DtFederateRemovedCb)(
const MAKRti::DtString&,
69 const MAKRti::DtString&,
unsigned int,
unsigned int,
71 typedef void (*DtPortReadyCb)(
unsigned long,
void*);
72 typedef int (*DtExecAddChangeCb)(
const MAKRti::DtString&,
unsigned int,
74 typedef int (*DtExecRemovedChangeCb)(
const MAKRti::DtString&,
unsigned int,
76 typedef int (*DtSocketQueueCb)(
unsigned int, int,
void*);
79 typedef void (*DtNotWaitingForFwsCb)(
void*);
80 typedef std::vector< std::pair< DtConnectionChangeCb, void* > >
DtCallbackList;
92 MAKRti::DtInetAddr host,
int forwarderPort, MAKRti::DtInetAddr addnlConnection ) :
93 myParams( params ), myRoutes( routes ), myAddress( host ), myOk( true ),
94 myPortToUse(forwarderPort), myAdditionalAddrToConnectTo(addnlConnection)
101 virtual bool isOk()
const {
return myOk; }
104 virtual bool isReady()
const = 0;
107 virtual DtAddressMsgPair getNextMsg() = 0;
110 virtual void sendByTransport(
const DtForwarderMsg& msg )
const = 0;
113 virtual void sendToAllReliable(
const DtForwarderMsg& msg )
const = 0;
117 virtual void sendToListReliable(
const DtForwarderMsg& msg,
121 virtual inline bool flush();
124 virtual void selectParams( MAKRti::DtSelectParamWithWrite& selectParams ) = 0;
127 virtual void updateRoutes() = 0;
134 virtual void clearNeededConnections() = 0;
137 virtual unsigned int abortPendingConnections() = 0;
140 virtual unsigned int pendingConnectionsAborted() = 0;
143 virtual DtAddressPortList connections()
const = 0;
146 virtual void listenToMulticastGroup(
const MAKRti::DtInetAddr& mcastAddr ) = 0;
147 virtual void dropMulticastGroup(
const MAKRti::DtInetAddr& mcastAddr ) = 0;
150 virtual bool updateFederateConnectionId(
unsigned long orig,
151 unsigned long final ) = 0;
154 virtual inline void addConnectionEstablishedCb( DtConnectionChangeCb callback,
void* usr );
155 virtual inline void removeConnectionEstablishedCb( DtConnectionChangeCb callback,
void* usr );
158 virtual inline void addConnectionLostCb( DtConnectionChangeCb callback,
void* usr );
159 virtual inline void removeConnectionLostCb( DtConnectionChangeCb callback,
void* usr );
161 virtual inline void addForwarderPortReadyCb( DtPortReadyCb callback,
void* usr );
162 virtual inline void removeForwarderPortReadyCb( DtPortReadyCb callback,
void* usr );
164 virtual inline void addFederateJoinedCb( DtFederateAddedCb callback,
void* usr );
165 virtual inline void removeFederateJoinedCb( DtFederateAddedCb callback,
void* usr );
167 virtual inline void addFederateResignedCb( DtFederateRemovedCb callback,
void* usr );
168 virtual inline void removeFederateResignedCb( DtFederateRemovedCb callback,
void* usr );
171 virtual inline void addSocketQueueCb( DtSocketQueueCb callback,
void* usr );
172 virtual inline void removeSocketQueueCb( DtSocketQueueCb callback,
void* usr );
176 virtual inline void addWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback,
void* usr);
177 virtual inline void removeWaitingForForwarderConnectionsCb(DtWaitingForFwsCb callback,
void* usr);
181 virtual inline void addNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback,
void* usr);
182 virtual inline void removeNotWaitingForForwarderConnectionsCb(DtNotWaitingForFwsCb callback,
void* usr);
184 virtual inline void addExecConnectionEstablishedCb(
185 DtExecAddChangeCb callback,
void* usr);
186 virtual inline void removeExecConnectionEstablishedCb(
187 DtExecAddChangeCb callback,
void * usr);
189 virtual inline void addExecDisconnectedCb(
190 DtExecRemovedChangeCb callback,
void* usr);
191 virtual inline void removeExecDisconnectedCb(
192 DtExecRemovedChangeCb callback,
void* usr);
194 virtual int execConnected(
const MAKRti::DtString& connName,
195 unsigned int connID,
const DtInetAddrAndPort& addr,
const MAKRti::DtString& hostName,
196 bool fullyCompliant);
197 virtual int execDisconnected(
const MAKRti::DtString& connName,
200 virtual int socketQueueStatus(
unsigned int connId,
int connQueueStatus );
202 virtual void forwarderNodeIsReady(
unsigned long id);
207 virtual void waitingForForwarderConnections(
const DtConnAndNameMap& allNeededFws,
208 const DtConnAndNameMap& stillNeededFws);
210 virtual void notWaitingForForwarderConnections();
217 virtual void setForwarderId(
unsigned long id);
222 virtual inline int connectionEstablished(
const MAKRti::DtString& connName,
224 virtual inline int connectionLost(
const MAKRti::DtString& connName,
227 static int connectionEstablished(
const MAKRti::DtString& connName,
229 static int connectionLost(
const MAKRti::DtString& connName,
232 virtual void federateResigned(
const MAKRti::DtString& connName,
233 const MAKRti::DtString& connType,
unsigned int connID,
235 virtual void federateJoined(
const MAKRti::DtString& connName,
236 const MAKRti::DtString& connType,
237 const MAKRti::DtString& federationName,
unsigned int connID,
239 const MAKRti::DtString& hostName,
unsigned int processId,
240 const MAKRti::DtString& processName,
243 static void federateJoined(
const MAKRti::DtString& connName,
244 const MAKRti::DtString& connType,
245 const MAKRti::DtString& federationName,
unsigned int connID,
247 const MAKRti::DtString& hostName,
unsigned int processId,
248 const MAKRti::DtString& processName,
const MAKRti::DtString& commandArgs,
250 static void federateResigned(
const MAKRti::DtString& connName,
251 const MAKRti::DtString& connType,
unsigned int connID,
254 static int execConnected(
const MAKRti::DtString& connName,
256 const MAKRti::DtString& hostName,
bool fullyCompliant,
void* usr);
257 static int execDisconnected(
const MAKRti::DtString& connName,
260 static int socketQueueStatus(
unsigned int connId,
int connQueueStatus,
263 static void forwarderNodeIsReady(
unsigned long id,
void* usr);
302 std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr );
327 if (-1 == ( *iter->first )( connName, connID, addr, iter->second ))
339 std::pair<DtConnectionChangeCb, void*> cbPair( callback, usr );
363 if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) )
376 std::pair<DtFederateRemovedCb, void*> cbPair( callback, usr );
395 std::pair< DtSocketQueueCb, void* > cbPair( callback, usr );
397 DtSocketQueueCallbackList::iterator pos = std::find(
mySocketQueueCbs.begin(),
406 DtSocketQueueCallbackList::iterator pos = std::find(
mySocketQueueCbs.begin(),
419 ( *iter->first )( connName, connType, connID, fedHandle, addr, iter->second );
426 ((
DtForwarderPort*)usr)->federateResigned(connName, connType, connID, fedHandle, addr);
432 std::pair<DtPortReadyCb, void*> cbPair( callback, usr );
433 DtPortReadyCallbackList::iterator pos = std::find(
myPortReadyCbs.begin(),
443 DtPortReadyCallbackList::iterator pos = std::find(
myPortReadyCbs.begin(),
451 return (static_cast<DtForwarderPort*>(usr))->forwarderNodeIsReady(
id);
456 for ( DtPortReadyCallbackList::iterator iter =
myPortReadyCbs.begin();
459 ( *iter->first )(
id, iter->second);
468 std::pair<DtFederateAddedCb, void*> cbPair( callback, usr );
485 const MAKRti::DtString& connType,
486 const MAKRti::DtString& federationName,
488 unsigned int fedHandle,
490 const MAKRti::DtString& hostName,
491 unsigned int processId,
492 const MAKRti::DtString& processName,
493 const MAKRti::DtString& commandArgs,
499 ( *iter->first )( connName, connType, federationName, connID, fedHandle,
500 addr, hostName, processId, processName, commandArgs, hlaVersion,
506 const MAKRti::DtString& connType,
507 const MAKRti::DtString& federationName,
509 unsigned int fedHandle,
511 const MAKRti::DtString& hostName,
512 unsigned int processId,
513 const MAKRti::DtString& processName,
514 const MAKRti::DtString& commandArgs,
518 ((
DtForwarderPort*)usr)->federateJoined(connName, connType, federationName,
519 connID, fedHandle, addr, hostName, processId, processName, commandArgs,
529 return ((
DtForwarderPort*)usr)->connectionEstablished(connName, connID, addr);
537 return ((
DtForwarderPort*)usr)->connectionLost(connName, connID, addr);
545 std::pair<DtExecAddChangeCb, void*> cbPair( callback, usr );
567 const MAKRti::DtString& hostName,
568 bool fullyCompliant,
void* usr)
570 return ((
DtForwarderPort*)usr)->execConnected(connName, connID, addr, hostName, fullyCompliant);
576 const MAKRti::DtString& hostName,
577 bool fullyCompliant )
583 if ( -1 == ( *iter->first )( connName, connID, addr, hostName, fullyCompliant, iter->second ) )
595 std::pair<DtExecRemovedChangeCb, void*> cbPair( callback, usr );
617 return ((
DtForwarderPort*)usr)->execDisconnected(connName, connID, addr);
627 if ( -1 == ( *iter->first )( connName, connID, addr, iter->second ) )
638 std::pair< DtWaitingForFwsCb, void* > cbPair( callback, usr );
666 ( *iter->first )( allNeededFws, stillNeededFws, iter->second );
673 std::pair< DtNotWaitingForFwsCb, void* > cbPair( callback, usr );
700 ( *iter->first )( iter->second );
706 return ((
DtForwarderPort*)usr)->socketQueueStatus( connId, connQueueStatus );
716 if( -1 == ( *iter->first )( connId, connQueueStatus, iter->second ) )