MAK RTIspy API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
rtiAssistantPeer.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2016 VT MAK
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <rtiUtil.h>
13 #include <rtiVersion.h>
14 
16 #include "assistantMsgCbMgr.h"
17 #include "assistantLicServerInfo.h"
19 #include "assistantConnMsg.h"
21 #include "rtiAssistantClient.h"
22 #include "assistantInfo.h"
23 #include "assistantInfoMsg.h"
25 #include "assistantNetStatsEnums.h"
28 
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>
34 
36 class DtAssistantInfoMsg;
39 class DtAssistantConfig;
42 class DtUdpMsgSocket;
45 class DtAssistantPeerSocketAdditionCbInfo;
46 class DtAssistantPeerSocketRemovalCbInfo;
47 typedef void (*DtInterfaceFoundCb)( void* );
48 #define DtCbInfoStruct( cbType ) \
49 struct cbType##Info \
50 { \
51  cbType##Info( cbType cb, void* usr ) : \
52  myCb(cb), \
53  myUsr(usr) \
54  { }; \
55  cbType myCb; \
56  void* myUsr; \
57 };
58 
59 
60 typedef void(*DtAssistantConnectionLostCallback)(const DtAssistantConnectionStruct& sock, void* usr);
62 {
63 public:
64 
66  {
67  myCb = cb;
68  myUsr = usr;
69  }
70 
72  void* myUsr;
73 };
74 
76 typedef void(*DtAssistantSocketAdditionCb)(int compId, void* usr);
77 typedef void(*DtAssistantSocketRemovalCb)(int compId, const MAKRti::DtString& reason, void* usr);
78 typedef std::list<DtAssistantPeerSocketAdditionCbInfo*> DtAssistantPeerSocketAdditionCallbackList;
79 typedef std::list<DtAssistantPeerSocketRemovalCbInfo*> DtAssistantPeerSocketRemovalCallbackList;
83 {
84 public:
85 
87  DtRtiAssistantPeer( int id, int port,
88  const MAKRti::DtInetAddr& ipv4Addr,
89  const MAKRti::DtInetAddr& ipv6Addr,
90  int ttl,
91  bool disableMulticast,
92  const DtNetU128 & uuid);
93 
95  virtual ~DtRtiAssistantPeer();
96 
99  virtual bool tick( double timeout = 0 );
100 
102  virtual void setMsgFactory( DtAssistantMessageFactory* fact );
103 
105  virtual DtAssistantMessageFactory* msgFactory() const;
106 
110 
111  virtual void addMsgCallback( DtAssistantMsgKind msgKind,
112  DtAssistantMsgCbMgr::DtCallbackFcn fcn, void* usr );
113  virtual void removeMsgCallback( DtAssistantMsgKind msgKind,
114  DtAssistantMsgCbMgr::DtCallbackFcn fcn, void* usr );
115 
118  virtual void addInterfaceFoundCallback( DtInterfaceFoundCb cb, void* usr );
119  virtual void removeInterfaceFoundCallback( DtInterfaceFoundCb cb, void* usr );
120 
122 
124  virtual void sendQueryMsg();
125 
127  virtual void sendForeignQueryMsg(const DtAssistantInfo& assistant);
128 
130  virtual void sendForeignQueryMsg(const DtAssistantConnectionStruct& assistant);
131 
133  virtual void sendForeignBreakMsg(const DtAssistantInfo& assistant);
134 
136  virtual void sendAssistantConnMsg(const DtAssistantConnectionStruct& assistant, DtAssistantHandshakeType handshakeType, const DtAssistantConnectionId& id, const DtAssistantConnectionId& ackId = DtAssistantUuidNIL);
137 
140  virtual void sendInfoMsg( const DtRtiConnectionAndConfiguration& connsAndConfigs,
141  unsigned memoryPeriod, bool acceptRemoteCommands, bool removal );
142 
145  virtual void sendLightweightInfoMsg( const DtRtiConnectionAndConfiguration& connsAndConfigs,
146  unsigned memoryPeriod );
147 
150  virtual void sendLicServerInfoMsg( const DtLicServerSet& licServers,
151  bool removal );
152 
154  virtual void sendForwarderConnectMsg( int compId, const DtString& targetHost,
155  const MAKRti::DtInetAddr& targetAddress, int targetPort,
156  const DtAssistantInfo& assistant );
157 
160  virtual void sendStartRtiForwarderMsg( const DtRtiConnectionInfoDataPair& conn,
161  const DtRtiConnectionConfigurationInfo& config,
162  const DtAssistantInfo& assistant = DtAssistantInfo() );
163 
166  virtual void sendStartRtiexecMsg( const DtRtiConnectionInfoDataPair& conn,
167  const DtRtiConnectionConfigurationInfo& config,
168  const DtAssistantInfo& assistant = DtAssistantInfo() );
169 
173  virtual void sendObserveFederationsMsg( const DtRtiConnectionInfo& conn,
174  bool observe, const DtAssistantInfo& assistant = DtAssistantInfo(),
175  int compId = -1 );
176 
179  virtual void sendObserveRtiExecLogMsg( const DtAssistantInfo& assistant,
180  int compId, bool observe );
181 
184  virtual void sendObserveRtiexecRspMsg( DtNotifyLevelType notifyLevel, int compId,
185  const DtAssistantInfo& destination );
186 
189  virtual void sendObserveRtiForwarderMsg( const DtRtiConnectionInfo& conn,
190  bool observe, const DtAssistantInfo& assistant, int compId );
191 
194  virtual void sendFederationStateMsg( const DtRtiConnectionInfoDataPair& conn,
195  const DtAssistantFederationInfo& federation, bool isRemoval );
196 
199  virtual void sendNoFederationMsg( const DtRtiConnectionInfoDataPair& conn );
200 
203  virtual void sendFederateResignMsg( const DtAssistantInfo& assistant,
204  int compId, int federationHdl, int federateHdl );
205 
208  virtual void sendFederationDestroyMsg( const DtAssistantInfo& assistant,
209  int compId, int federationHdl );
210 
213  virtual void sendRidParamsRequestMsg( const DtAssistantInfo& assistant,
214  int compId );
215 
219  virtual void sendLogRequestMsg( const DtAssistantInfo& assistant,
220  int compId, unsigned maxLogSize );
221 
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 );
228 
230  virtual void sendNetworkTestEnableMsg( const DtAssistantInfo& assistant,
231  int compId, int federationHdl, bool enable );
232 
235  virtual void sendRtiexecExitMsg( const DtAssistantInfo& assistant, int compId );
236 
239  virtual void sendNotifyObserveMsg( bool isObserving );
240 
242  virtual void sendNotifyMsg( const MAKRti::DtString& text,
243  DtNotifyLevelType notifyLevel, const MAKRti::DtString& sourceName );
244 
247  virtual void sendRemovalMsg();
248 
252  virtual void sendFederateInfoReqMsg(const DtAssistantInfo& astnt,
253  const DtRtiConnectionInfo& conn,
254  const MAKRti::DtString& federation = MAKRti::DtString::nullString(),
255  unsigned federateHandle = 0 );
256 
259  virtual void sendFederateInfoRespMsg(const DtRtiConnectionInfo& conn,
260  std::vector<const DtAssistantFederateInfo*> federates);
261 
262 
265  virtual void sendNetStatsObservationRequestMsg(const DtAssistantInfo& astnt, DtAssistantObservationType observationType,
266  int compId, bool observe = false, unsigned int interval = 0);
267 
268  virtual void sendNetStatsObservationResponseMsg(const DtAssistantInfo& astnt, DtAssistantObservationType observationType,
269  int compId, bool observe);
270 
271  virtual void sendNetStatsStringUpdateReqMsg(const DtAssistantInfo& assistant, int compId,
272  DtAssistantHandleType handletype, const std::set<DtU32>& handles);
273 
274  virtual void sendNetStatsStringUpdate(const DtAssistantInfo& assistant, int compId,
275  DtAssistantHandleType handletype, const std::vector<DtU32>& objectInstanceHandles,
276  const std::vector<MAKRti::DtString>& objectInstanceNames);
277 
278  virtual void forwardNetStatsUpdate(const DtAssistantMsg &msg, const std::set<DtAssistantInfo>& observers);
279 
280  virtual void sendFedDisconnectNetStatsObsRespMsg(DtAssistantObservationType observationType,
281  int compId, const std::set<DtAssistantInfo>& observers);
282 
283  virtual void sendNetStatsInitStateRequestMsg(const DtAssistantInfo& astnt,
284  DtAssistantObservationType observationType, int compId);
285 
286  virtual void sendFomTreeData(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);
293 
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,
312  DtAssistantHandleType objInterType, DtAssistantHandleType attrParamType,
313  DtAssistantHandleType parentClassType );
314  virtual void sendNetStatsFomAttrParamUpdate(const DtAssistantInfo& astnt,
315  int compId, DtAssistantHandleType handleType, bool isInit,
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 );
324 
329  virtual void forwardMsg( const DtAssistantMsg& msg, int astntCompId,
330  const DtAssistantInfo& dest = DtAssistantInfo() );
331 
333  virtual int port() const;
334 
337  virtual MAKRti::DtInetAddr ipv4Address() const;
338 
341  virtual MAKRti::DtInetAddr ipv6Address() const;
342 
344  virtual int id() const;
345 
348  virtual const MAKRti::DtInetAddr& currentNetworkInterfaceAddr() const;
349 
351  virtual const DtInetEndpoint& currentReceivedEndpoint() const;
352 
354  virtual const MAKRti::DtInetAddr& destinationAddress(const DtInetAddr& msgDestination) const;
355 
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 );
361 
363  virtual DtU32 maxMsgSize() const;
364 
366  void sendMsgToAssistant( const DtAssistantInfo& ifAddr,
367  DtAssistantMsg& msg );
368 
370  virtual void addForeignAssistantConnection(const DtAssistantConnectionStruct& ipAddr, const MAKRti::DtInetAddr& ifAddr);
371 
373  virtual void removeForeignAssistantConnection(const DtAssistantConnectionStruct& ipAddr);
374 
376  virtual void setUuid(const DtAssistantUuid& uuid);
377  virtual const DtAssistantUuid& uuid() const;
378 
379  virtual const DtHostNameAddress& hostNameAddress() const;
380 
381 #ifdef DtDIAGNOSTIC
382 
383  void enableMsgDiagnostics( bool enable );
384 
385 #endif
386 
388  virtual void setIgnoreAllPeerCommunication(bool valToSet) { myIgnoreAllPeerCommunication = valToSet; };
389  virtual bool isIgnoreAllPeerCommunication() const { return myIgnoreAllPeerCommunication; };
390 
392  virtual void addIgnoredAddress(const MAKRti::DtInetAddr& ipAddr);
393 
395  virtual void removeIgnoredAddress(const MAKRti::DtInetAddr& ipAddr);
396 
397  void addConnectionLostCallback(DtAssistantConnectionLostCallback cb, void* usr);
398  void removeConnectionLostCallback(DtAssistantConnectionLostCallback cb, void* usr);
399 
400 protected:
401 
404  virtual void sendStartRtiexecOrForwarderMsg( DtAssistantMsgKind msgKind,
406  const DtAssistantInfo& assistant = DtAssistantInfo() );
407 
411  bool needsProcessing( const DtAssistantMsg& msg );
412 
415  bool addSocketsForInterfaces();
416 
419  bool addTcpServerSocketsForInterfaces(const DtTime& now = 0);
420 
422  bool readAndProcess( DtTime maxTime );
423 
425  bool readAndProcessConnectingTcpSockets(DtTime maxTime);
426 
427  bool readAndProcessTcpSockets(DtTime maxTime);
429  void retransmitToForeignConnections(const DtAssistantMsg& msg);
430  void checkForDeadTcpConnections();
432  void calculateMsgStatistics();
433 
436  void sendMsgOnInterface( const MAKRti::DtInetAddr& ifAddr,
437  DtAssistantMsg& msg, const DtInetAddr& destAddr = DtInetAddr::inaddrAny(), int port = 0);
438 
441  void sendMsg( std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*>::iterator sockIter,
442  DtAssistantMsg& msg, const DtInetAddr& destAddr = DtInetAddr::inaddrAny(), int port = 0, bool sendToForeignAssistants = true );
443 
444  void sendToForeignConnection(std::map< DtInetAddr, DtUdpMsgSocket*>::iterator sockIter,
445  DtAssistantMsg& msg, const DtInetAddr& destAddr, int port);
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 );
450 
452  virtual void flushTcpSockets(DtTime maxTime);
453 
455  std::auto_ptr<DtAssistantMsg> netRead(DtMsgSocket* sock, int *retCode, DtInetEndpoint& ep) const;
456 
457  virtual void sendTcpMsg(const DtAssistantConnectionStruct& connection, DtAssistantHandshakeType handshakeType, DtAssistantToAssistantConnectionMsg* msgToSend);
458  virtual DtTcpMsgSocket* initiateTcpConnection(const DtAssistantConnectionStruct& connection);
459  virtual void queueTcpSynMessage(DtTcpMsgSocket* sock, DtAssistantToAssistantConnectionMsg* msgToSend);
460  virtual void addConnectingSocket(DtTcpMsgSocket* sock);
461  virtual void deletePendingSyns(DtTcpMsgSocket* sock);
462  virtual void processConnections();
463  virtual void reset(const DtAssistantConnectionStruct& connection);
465  static void tcpSocketAdditionCb(DtTcpMsgSocket* sock, void* usr);
466  virtual void tcpSocketAdditionCb(DtTcpMsgSocket* sock);
467  static void tcpSocketRemovalCb(DtTcpMsgSocket* sock, void* usr);
468  virtual void tcpSocketRemovalCb(DtTcpMsgSocket* sock);
469 
470 
471  virtual void invokeRemovalCallbacks(const DtAssistantConnectionStruct& second);
472  virtual void removeSocket(DtTcpMsgSocket* sock, const DtAssistantConnectionStruct& conn);
473 public:
474 
476 
477 protected:
478 
480  int myPort;
481 
483  MAKRti::DtInetAddr myIpv4Addr;
484 
486  MAKRti::DtInetAddr myIpv6Addr;
487 
489  int myTtl;
490 
493  int myId;
494 
497  std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*> mySockets;
498 
501  std::map< MAKRti::DtInetAddr, DtRemoteAssistantSet> myInterfaceToUdpForeignConnections;
502 
504  // TODO maybe this compare is wrong (should be by the tok?)
505  std::map< DtAssistantConnectionStruct, MAKRti::DtInetAddr, cmpByPublicAddress> myUdpForeignConnectionToInterface;
506 
507  std::map< DtAssistantConnectionStruct, std::pair< DtTcpMsgSocket*, MAKRti::DtInetAddr >, cmpByConnectionId > myTcpForeignConnections;
508  std::set<DtTcpMsgSocket*> myServerSocketsToDelete;
509  std::vector<std::pair<DtAssistantConnectionStruct, DtTime> > myClientSocketsDeleted;
510  std::map<DtTcpMsgSocket*, DtAssistantConnectionStruct> myAssistantConnectionsRemoved;
513  std::map< MAKRti::DtInetAddr, DtUdpMsgSocket*>::iterator mySocketIter;
514 
517  DtTcpMsgSocket* myCurTcpSocket;
518 
521  MAKRti::DtInetAddr myCurrNetworkInterfaceAddr;
522 
524  MAKRti::DtInetEndpoint myCurrReceivedEndpoint;
525 
528 
530  DtAssistantMessageFactory* myMessageFactory;
531 
533  DtAssistantDfltMsgFactory myDefaultMessageFactory;
534 
536  DtClock myClock;
537 
539  DtTime myNextCheckInterfacesTime;
540 
542  DtTime myNextClearCheckedInterfacesTime;
543 
545  DtTime myNextCheckDeadTcpConnections;
546 
548  DtTime myCheckInterfacesInterval;
549 
551  DtTime myClearCheckedInterfacesInterval;
552 
554  DtTime myCheckTcpConnectionsInterval;
555 
557  DtTime myNextProcessConnectionsTime;
558 
560  DtTime myNextProcessConnectionsInterval;
561 
563  DtTime myBeginProcessingTime;
564 
566  DtTime myNextStatsTime;
567 
569  DtTime myLastStatsTime;
570 
572  {
573  DtPeerMsgStats() :
574  numMsgsCurrPeriod(0), numMsgsTotal(0),
575  msgsPerSecLastPeriod(0), msgsPerSecOverall(0) {}
576 
578  unsigned numMsgsTotal;
581  };
582 
585 
588 
591 
593  std::list<DtInterfaceFoundCbInfo> myInterfaceFoundCallbacks;
594 
596  static const DtTime theStatisticsInterval;
597 
600 
603 
605  unsigned long mySequence;
606 
609 
612 
613  std::set<DtInetAddr> myIgnoredAddresses;
614 
616 
617 #ifdef DtDIAGNOSTIC
618  bool myDiagnosticsEnabled;
619 #endif
620 
622  DtString myHostname;
624  struct cmpByMacAddr {
625  bool operator()(const DtInetDevice& a, const DtInetDevice& b) const {
626  return a.macAddrString() < b.macAddrString();
627  }
628  };
629  // This comparison is currently expensive, but its sort of a rare cost as we don't expect sockets map to grow too big (most computers have 2 network cards)
631  bool operator()(const std::pair<DtString, DtInetUtils::DtInetAddrFamily>& a, const std::pair<DtString, DtInetUtils::DtInetAddrFamily>& b) const {
632  if (a.first != b.first)
633  {
634  return a.first < b.first;
635  }
636  else
637  {
638  return a.second < b.second;
639  }
640  }
641  };
642  typedef std::map<std::pair<DtString, DtInetUtils::DtInetAddrFamily>, DtTcpMsgSocketMgr*, cmpByMacAddrThenFam> DtTcpServerMap;
645  std::map<DtTcpMsgSocket*, MAKRti::DtTime> myPendingConnections;
646 
648 
649  std::map<DtTcpMsgSocket*, DtAssistantToAssistantConnectionMsg*> myPendingTcpSynMessages;
650 
651  //std::map<DtTcpMsgSocket*, DtAssistantConnectionId> myConnectingTcpClientSockets;
652  std::map<DtAssistantConnectionId, DtTcpMsgSocket*> myConnectingTcpClientSockets;
653  std::set<DtTcpMsgSocket*> myConnectingTcpServerSockets;
656 
657 
658  std::set<DtAssistanConnectionCbInfo*> myConnectionLostCallbacks;
659 
660  std::set<std::pair<DtString, DtInetUtils::DtInetAddrFamily>, cmpByMacAddrThenFam> myDevicesChecked;
661 };

Document ID: Generated on Mon Jul 9 10:30:41 EDT 2018 from SVN revision 190224
Copyright © 2005-2018 VT MÄK Inc. All Rights Reserved (www.mak.com)