29 #include <vlutil/vlSmartPointers.h>
30 #include <vlutil/vlInetEndpoint.h>
31 #include <vlutil/vlPrint.h>
32 #include <vlutil/vlTime.h>
33 #include <vlutil/vlUtil.h>
45 class DtAssistantPeerSocketAdditionCbInfo;
46 class DtAssistantPeerSocketRemovalCbInfo;
48 #define DtCbInfoStruct( cbType ) \
51 cbType##Info( cbType cb, void* usr ) : \
88 const MAKRti::DtInetAddr& ipv4Addr,
89 const MAKRti::DtInetAddr& ipv6Addr,
91 bool disableMulticast,
92 const DtNetU128 & uuid);
99 virtual bool tick(
double timeout = 0 );
112 DtAssistantMsgCbMgr::DtCallbackFcn fcn,
void* usr );
114 DtAssistantMsgCbMgr::DtCallbackFcn fcn,
void* usr );
124 virtual void sendQueryMsg();
141 unsigned memoryPeriod,
bool acceptRemoteCommands,
bool removal );
146 unsigned memoryPeriod );
150 virtual void sendLicServerInfoMsg(
const DtLicServerSet& licServers,
154 virtual void sendForwarderConnectMsg(
int compId,
const DtString& targetHost,
155 const MAKRti::DtInetAddr& targetAddress,
int targetPort,
179 virtual void sendObserveRtiExecLogMsg(
const DtAssistantInfo& assistant,
180 int compId,
bool observe );
184 virtual void sendObserveRtiexecRspMsg( DtNotifyLevelType notifyLevel,
int compId,
204 int compId,
int federationHdl,
int federateHdl );
208 virtual void sendFederationDestroyMsg(
const DtAssistantInfo& assistant,
209 int compId,
int federationHdl );
213 virtual void sendRidParamsRequestMsg(
const DtAssistantInfo& assistant,
220 int compId,
unsigned maxLogSize );
224 virtual bool sendLatencyTestRequestMsg(
const DtAssistantInfo& assistant,
225 int compId,
int federationHdl,
int federateHdl,
bool runTest,
bool continuous,
226 bool shouldHalt,
bool observing,
unsigned int interactionPeriod,
227 unsigned int numInteractions,
unsigned int payloadBytes );
230 virtual void sendNetworkTestEnableMsg(
const DtAssistantInfo& assistant,
231 int compId,
int federationHdl,
bool enable );
235 virtual void sendRtiexecExitMsg(
const DtAssistantInfo& assistant,
int compId );
239 virtual void sendNotifyObserveMsg(
bool isObserving );
242 virtual void sendNotifyMsg(
const MAKRti::DtString& text,
243 DtNotifyLevelType notifyLevel,
const MAKRti::DtString& sourceName );
247 virtual void sendRemovalMsg();
254 const MAKRti::DtString& federation = MAKRti::DtString::nullString(),
255 unsigned federateHandle = 0 );
260 std::vector<const DtAssistantFederateInfo*> federates);
266 int compId,
bool observe =
false,
unsigned int interval = 0);
269 int compId,
bool observe);
271 virtual void sendNetStatsStringUpdateReqMsg(
const DtAssistantInfo& assistant,
int compId,
274 virtual void sendNetStatsStringUpdate(
const DtAssistantInfo& assistant,
int compId,
276 const std::vector<MAKRti::DtString>& objectInstanceNames);
278 virtual void forwardNetStatsUpdate(
const DtAssistantMsg &msg,
const std::set<DtAssistantInfo>& observers);
281 int compId,
const std::set<DtAssistantInfo>& observers);
283 virtual void sendNetStatsInitStateRequestMsg(
const DtAssistantInfo& astnt,
287 int compId,
const std::vector<MAKRti::DtU32>& objectClassHandles,
288 const std::vector<MAKRti::DtU32>& parentObjectClassHandles,
289 const std::vector<MAKRti::DtString>& objectClassNames,
290 const std::vector<MAKRti::DtU32>& interactionClassHandles,
291 const std::vector<MAKRti::DtU32>& parentInteractionClassHandles,
292 const std::vector<MAKRti::DtString>& interactionClassNames);
294 virtual void sendNetStatsAttrStringUpdate(
const DtAssistantInfo& astnt,
295 int compId,
const std::vector<MAKRti::DtU32>& objectClassHandles,
296 const std::vector<MAKRti::DtU32>& attributeHandles,
297 const std::vector<MAKRti::DtString>& attributeNames,
298 const std::vector<MAKRti::DtU32>& parentClassHandles,
299 const std::vector<MAKRti::DtU32>& totalObjHandles);
300 virtual void sendNetStatsParamStringUpdate(
const DtAssistantInfo& astnt,
301 int compId,
const std::vector<MAKRti::DtU32>& interClassHandles,
302 const std::vector<MAKRti::DtU32>& parameterHandles,
303 const std::vector<MAKRti::DtString>& parameterNames,
304 const std::vector<MAKRti::DtU32>& parentInterHandles,
305 const std::vector<MAKRti::DtU32>& totalInterHandles);
306 virtual void sendNetStatsAttrParamStringUpdate(
const DtAssistantInfo& astnt,
307 int compId,
const std::vector<MAKRti::DtU32>& objectClassHandles,
308 const std::vector<MAKRti::DtU32>& attributeHandles,
309 const std::vector<MAKRti::DtString>& attributeNames,
310 const std::vector<MAKRti::DtU32>& parentClassHandles,
311 const std::vector<MAKRti::DtU32>& totalObjHandles,
314 virtual void sendNetStatsFomAttrParamUpdate(
const DtAssistantInfo& astnt,
316 const std::vector<MAKRti::DtU32>& objectClassHandles,
317 const std::vector<MAKRti::DtU32>& attributeHandles,
318 const std::vector<bool>& attributePub,
319 const std::vector<bool>& attributeSub,
320 const std::vector<DtTransportType>& attributeTransport,
321 const std::vector<DtOrderType>& attributeOrder,
322 const std::vector<bool>& objectPub,
const std::vector<bool>& objectSub,
323 const std::vector<MAKRti::DtU32>& objPubSubHandles );
329 virtual void forwardMsg(
const DtAssistantMsg& msg,
int astntCompId,
333 virtual int port()
const;
337 virtual MAKRti::DtInetAddr ipv4Address()
const;
341 virtual MAKRti::DtInetAddr ipv6Address()
const;
344 virtual int id()
const;
348 virtual const MAKRti::DtInetAddr& currentNetworkInterfaceAddr()
const;
351 virtual const DtInetEndpoint& currentReceivedEndpoint()
const;
354 virtual const MAKRti::DtInetAddr& destinationAddress(
const DtInetAddr& msgDestination)
const;
357 virtual void getMsgStats(
unsigned& totalRecv,
double& recvPerSecOverall,
358 double& recvPerSecCurr,
unsigned& totalProc,
double& procPerSecOverall,
359 double& procPerSecCurr,
unsigned& totalSent,
double& sentPerSecOverall,
360 double& sentPerSecCurr );
363 virtual DtU32 maxMsgSize()
const;
383 void enableMsgDiagnostics(
bool enable );
392 virtual void addIgnoredAddress(
const MAKRti::DtInetAddr& ipAddr);
395 virtual void removeIgnoredAddress(
const MAKRti::DtInetAddr& ipAddr);
415 bool addSocketsForInterfaces();
419 bool addTcpServerSocketsForInterfaces(
const DtTime& now = 0);
422 bool readAndProcess( DtTime maxTime );
425 bool readAndProcessConnectingTcpSockets(DtTime maxTime);
427 bool readAndProcessTcpSockets(DtTime maxTime);
430 void checkForDeadTcpConnections();
432 void calculateMsgStatistics();
436 void sendMsgOnInterface(
const MAKRti::DtInetAddr& ifAddr,
437 DtAssistantMsg& msg,
const DtInetAddr& destAddr = DtInetAddr::inaddrAny(),
int port = 0);
441 void sendMsg( std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*>::iterator sockIter,
442 DtAssistantMsg& msg,
const DtInetAddr& destAddr = DtInetAddr::inaddrAny(),
int port = 0,
bool sendToForeignAssistants =
true );
444 void sendToForeignConnection(std::map< DtInetAddr, DtUdpMsgSocket*>::iterator sockIter,
446 void sendToUDPForeignConnection(std::map< DtInetAddr, DtUdpMsgSocket*>::iterator sockIter,
DtAssistantMsg* ptToPtMsg,
const DtInetAddr& destAddr,
int port);
447 void sendToTCPForeignConnection(std::map< DtInetAddr, DtUdpMsgSocket*>::iterator sockIter,
DtTcpMsgSocket* tcpSock,
DtAssistantMsg* ptToPtMsg);
449 void sendMsgToAll(
DtAssistantMsg& msg,
const DtInetAddr& destAddr = DtInetAddr::inaddrAny(),
int port = 0,
bool sentToForeignAssistants =
true );
452 virtual void flushTcpSockets(DtTime maxTime);
455 std::auto_ptr<DtAssistantMsg> netRead(
DtMsgSocket* sock,
int *retCode, DtInetEndpoint& ep)
const;
462 virtual void processConnections();
483 MAKRti::DtInetAddr myIpv4Addr;
486 MAKRti::DtInetAddr myIpv6Addr;
508 std::set<DtTcpMsgSocket*> myServerSocketsToDelete;
509 std::vector<std::pair<DtAssistantConnectionStruct, DtTime> > myClientSocketsDeleted;
510 std::map<DtTcpMsgSocket*, DtAssistantConnectionStruct> myAssistantConnectionsRemoved;
517 DtTcpMsgSocket* myCurTcpSocket;
521 MAKRti::DtInetAddr myCurrNetworkInterfaceAddr;
524 MAKRti::DtInetEndpoint myCurrReceivedEndpoint;
539 DtTime myNextCheckInterfacesTime;
542 DtTime myNextClearCheckedInterfacesTime;
545 DtTime myNextCheckDeadTcpConnections;
548 DtTime myCheckInterfacesInterval;
551 DtTime myClearCheckedInterfacesInterval;
554 DtTime myCheckTcpConnectionsInterval;
557 DtTime myNextProcessConnectionsTime;
560 DtTime myNextProcessConnectionsInterval;
563 DtTime myBeginProcessingTime;
566 DtTime myNextStatsTime;
569 DtTime myLastStatsTime;
574 numMsgsCurrPeriod(0), numMsgsTotal(0),
575 msgsPerSecLastPeriod(0), msgsPerSecOverall(0) {}
618 bool myDiagnosticsEnabled;
625 bool operator()(
const DtInetDevice& a,
const DtInetDevice& b)
const {
626 return a.macAddrString() < b.macAddrString();
631 bool operator()(
const std::pair<DtString, DtInetUtils::DtInetAddrFamily>& a,
const std::pair<DtString, DtInetUtils::DtInetAddrFamily>& b)
const {
632 if (a.first != b.first)
634 return a.first < b.first;
638 return a.second < b.second;