MAK RTIspy API Documentation for HLA 1.3
rtiMessageForwarder.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992, 1997 MaK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: rtiMessageForwarder.h,v $ $Revision: 1.19 $ $State: Exp $
7 *********************************************************************/
8 #ifndef DtRtiMsgForwarder_H_
9 #define DtRtiMsgForwarder_H_
10 
14 
15 #include "rtiMsConfig.h"
16 #include "RIDparams.h"
17 #include "multicastDiscoveryMgr.h"
18 #include "rtiVersion.h"
19 #include <vlutil/vlRunnable.h>
20 #include <vlutil/vlThreadSafe.h>
21 //#include "execThreadEvents.h"
22 
23 #include <vlutil/vlSelectParamW.h>
24 #include <vlutil/vlSmartPointers.h>
25 #include <vlutil/vlInetAddr.h>
26 
27 #include <utility>
28 #include <deque>
29 
32 class DtRtiMsg;
33 class DtRtiMsgForwarder;
35 class DtMessageFilter;
39 class DtFedexMsgFilter;
41 class DtMsgFwdrFunctor;
42 class DtRtiMsgForwarder;
45 class DtTcpMsgSocket;
46 class DtTcpMsgSocketMgr;
47 
49 typedef DtRtiMsgForwarder* (*DtRtiMsgFwderCreator)( unsigned long, const DtRIDParameters& params );
50 
57 {
58 protected:
60  DtRtiMsgForwarder( unsigned long id, const DtRIDParameters& params );
61 
62 public:
63 
65  {
66  ConnectionInfo( unsigned long connId, DtTcpMsgSocket* socket,
67  const MAKRti::DtInetAddr& ipAddr, int port,
68  unsigned long federateHandle = 0,
69  const MAKRti::DtString& federateName = "",
70  const MAKRti::DtString& federateType = "",
71  const MAKRti::DtString& fedexName = "",
72  DtHlaVersionId hlaVersion = DtHla13,
73  const MAKRti::DtInetAddr& webServerAddr = MAKRti::DtInetAddr(),
74  int webServerPort = 0 );
75 
77  bool operator==( const ConnectionInfo& rhs );
78  bool operator<( const ConnectionInfo& rhs );
79 
81  void setFederateInfo( unsigned long fedexHandle, unsigned long handle,
82  const MAKRti::DtString& name, const MAKRti::DtString& type,
83  const MAKRti::DtString& fedexName, DtHlaVersionId hlaVersion );
84  void setConnectionId( unsigned long connId );
85 
87  void setWebServerAddr( const MAKRti::DtInetAddr& ip );
88  void setWebServerPort( int port );
89 
90  unsigned long myConnId;
91  unsigned long myFederationHandle;
92  unsigned long myHandle;
93  unsigned long myProcessID;
94  MAKRti::DtInetAddr myIp;
95  int myPort;
96  MAKRti::DtString myName;
97  MAKRti::DtString myType;
98  MAKRti::DtString myFederationName;
99  MAKRti::DtString myProcessName;
100  MAKRti::DtString myCommandArgs;
101  MAKRti::DtInetAddr myWebServerAddr;
105 
106 
109  };
110 
111  typedef DtBoost::shared_ptr<ConnectionInfo> ConnectionInfoSP;
112  typedef DtBoost::weak_ptr<ConnectionInfo> ConnectionInfoWP;
113  typedef std::map< const DtTcpMsgSocket*, ConnectionInfoSP > SocketToConnInfoMap;
114 
115 
116 public:
117 
119  virtual ~DtRtiMsgForwarder();
120 
122  virtual void init();
123 
125  virtual bool hasExec() const;
126 
130  virtual void run();
131 
133 
135  virtual void setEnableBundling( unsigned int maxBundleSize );
136 
138  virtual void setUseSmartForwarding( bool yesNo );
139 
141  virtual void setRouteFedexMessages( bool yesNo );
142 
143 
146  virtual void addPacketFilter( DtMessageFilter* filter );
147  virtual void removePacketFilter( DtMessageFilter* filter );
148 
150  virtual inline unsigned long forwarderId() const;
151 
153  virtual void setForwarderId(unsigned long newId);
154 
156  void updateTcpForwarderQueuedSockets();
157 
158 public:
159 
162 
164  virtual inline const DtRtiMsgForwarder::SocketToConnInfoMap& getConnToConnInfoMap() const;
165 
167  virtual ConnectionInfoSP getConnectionInfoByConnId( unsigned long connId ) const;
168 
170  virtual ConnectionInfoSP getConnectionInfoByHandle( unsigned long federateHandle ) const;
171 
173  virtual ConnectionInfoSP getConnectionInfoBySocket( const DtTcpMsgSocket* sock ) const;
174 
176  virtual std::pair< bool, unsigned long > rtiExecConnected() const;
177 
179  virtual void sendMessage( const DtRtiMsg& msg, const DtTcpMsgSocket* src = 0 );
180 
184  virtual void requestCloseAllConnections();
185 
191  virtual void requestKillSingleConnection( const DtTcpMsgSocket* sock );
192 
197  virtual void markConnectionAsAboutToBeDeleted(DtTcpMsgSocket const* socket, unsigned int connectionId);
198 
200  virtual bool isConnectionMarkedForDeletion(unsigned int connectionId) const;
201 
205  virtual void removeOldConnection(unsigned int connectionId);
206 
209  virtual void shutdownRequestedByExec();
210 
214  virtual bool updateFederateConnectionId( unsigned long orig, unsigned long final );
215 
217  virtual bool updateFederateWebServer( unsigned long connId, MAKRti::DtInetAddr ip, int port );
218 
220  virtual void updateConnectionProcessParameters( unsigned long connId, unsigned long processId, MAKRti::DtString processName, MAKRti::DtString commandArgs );
221 
223  virtual bool shouldStop();
224 
225 public:
226 
228  static DtRtiMsgForwarder* create( unsigned long id, const DtRIDParameters& params );
229 
233  static void setCreatorFunction(DtRtiMsgFwderCreator fn);
234 
236  static void tcpSocketAdditionCb(DtTcpMsgSocket* sock, void* usr);
237  static void tcpSocketRemovalCb(DtTcpMsgSocket* sock, void* usr);
238 
239 protected:
240 
241  virtual void performMcastDiscovery();
242 
245  virtual void applyRegisteredFilters();
246  virtual void disableRegisteredFilters();
247 
250  virtual void waitForIo();
251 
252 
253  virtual void tcpSocketAdditionCb(DtTcpMsgSocket* sock);
254  virtual void tcpSocketRemovalCb(DtTcpMsgSocket* sock);
255 
257  virtual unsigned long consumeConnId();
258 
262  virtual void preRunLoopEvent() {};
263  virtual void runLoopEvent() {};
264  virtual void postRunLoopEvent() {};
265 
266 
267  virtual bool populateConnectionInformation(
268  unsigned int& numForwarderToForwarderConns,
269  std::vector<MAKRti::DtString>& forwarderIdentifiers,
270  std::vector<MAKRti::DtString>& forwarderConnectionHostNames,
271  std::vector<MAKRti::DtInetAddr>& forwarderConnectionAddrs,
272  unsigned int& numForwarderClientConns,
273  std::vector<MAKRti::DtString>& clientConnectionHostNames,
274  std::vector<MAKRti::DtInetAddr>& clientConnectionAddrs) const;
275 
277  virtual void closeAllConnectionsIfRequested();
278 
280  DtRtiMsgForwarder( const DtRtiMsgForwarder& orig );
281  DtRtiMsgForwarder& operator=( const DtRtiMsgForwarder& orig );
282 
283 protected:
284 
286 
289  unsigned long myForwarderId;
290 
292  MAKRti::DtInetAddr myForwarderAddr;
293 
296 
299 
302 
304  int myPort;
306 
310 
312  unsigned int myPacketBundleSize;
313 
316 
320 
323 
326 
330 
333 
335  DtThreadSafe< std::deque<DtMsgFwdrFunctor*> > myPendingProxyCommands;
336 
338  std::vector< DtMessageFilter* > myRegisteredFilters;
339 
345 
347  std::set<DtTcpMsgSocket const*> myConnectionsAboutToBeDeleted;
348 
349  MAKRti::DtSelectParamWithWrite mySelectParams;
350 
353 
354 protected:
355 
357 };
358 
359 
360 
362 {
363  return myConnToConnInfoMap;
364 }
365 
366 inline unsigned long DtRtiMsgForwarder::forwarderId() const
367 {
368  return myForwarderId;
369 }
370 
371 
372 #endif
373 

Document ID: Generated on Tue May 7 16:26:47 EDT 2013 from SVN revision 126903
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)