MAK RTIspy API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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;
41 class DtFedexMsgFilter;
43 class DtMsgFwdrFunctor;
44 class DtRtiMsgForwarder;
47 class DtTcpMsgSocket;
48 class DtTcpMsgSocketMgr;
49 
51 typedef DtRtiMsgForwarder* (*DtRtiMsgFwderCreator)( unsigned long, const DtRIDParameters& params );
52 
59 {
60 protected:
62  DtRtiMsgForwarder( unsigned long id, const DtRIDParameters& params );
63 
64 public:
65 
67  {
68  ConnectionInfo( unsigned long connId, DtTcpMsgSocket* socket,
69  const MAKRti::DtInetAddr& ipAddr, int port,
70  unsigned long federateHandle = 0,
71  const MAKRti::DtString& federateName = "",
72  const MAKRti::DtString& federateType = "",
73  const MAKRti::DtString& fedexName = "",
74  DtHlaVersionId hlaVersion = DtHla13);
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 
86  unsigned long myConnId;
87  unsigned long myFederationHandle;
88  unsigned long myHandle;
89  unsigned long myProcessID;
90  MAKRti::DtInetAddr myIp;
91  int myPort;
92  MAKRti::DtString myName;
93  MAKRti::DtString myType;
94  MAKRti::DtString myFederationName;
95  MAKRti::DtString myProcessName;
96  MAKRti::DtString myCommandArgs;
99 
100 
103  };
104 
105  typedef DtBoost::shared_ptr<ConnectionInfo> ConnectionInfoSP;
106  typedef DtBoost::weak_ptr<ConnectionInfo> ConnectionInfoWP;
107  typedef std::map< const DtTcpMsgSocket*, ConnectionInfoSP > SocketToConnInfoMap;
108 
109 
110 public:
111 
113  virtual ~DtRtiMsgForwarder();
114 
116  virtual void init();
117 
119  virtual bool hasExec() const;
120 
124  virtual void run();
125 
127 
129  virtual void setEnableBundling( unsigned int maxBundleSize );
130 
132  virtual void setUseSmartForwarding( bool yesNo );
133 
135  virtual void setUseInternalSmartForwarding( bool yesNo );
136 
138  virtual void setRouteFedexMessages( bool yesNo );
139 
140 
143  virtual void addPacketFilter( DtMessageFilter* filter );
144  virtual void removePacketFilter( DtMessageFilter* filter );
145 
147  virtual inline unsigned long forwarderId() const;
148 
150  virtual void setForwarderId(unsigned long newId);
151 
153  void updateTcpForwarderQueuedSockets();
154 
155 public:
156 
159 
161  virtual inline const DtRtiMsgForwarder::SocketToConnInfoMap& getConnToConnInfoMap() const;
162 
164  virtual ConnectionInfoSP getConnectionInfoByConnId( unsigned long connId ) const;
165 
167  virtual ConnectionInfoSP getConnectionInfoByHandle( unsigned long federateHandle ) const;
168 
170  virtual ConnectionInfoSP getConnectionInfoBySocket( const DtTcpMsgSocket* sock ) const;
171 
173  virtual std::pair< bool, unsigned long > rtiExecConnected() const;
174 
176  virtual void sendMessage( const DtRtiMsg& msg, const DtTcpMsgSocket* src = 0 );
177 
181  virtual void requestCloseAllConnections();
182 
188  virtual void requestKillSingleConnection( const DtTcpMsgSocket* sock );
189 
194  virtual void markConnectionAsAboutToBeDeleted(DtTcpMsgSocket const* socket, unsigned int connectionId);
195 
197  virtual bool isConnectionMarkedForDeletion(unsigned int connectionId) const;
198 
202  virtual void removeOldConnection(unsigned int connectionId);
203 
206  virtual void shutdownRequestedByExec();
207 
211  virtual bool updateFederateConnectionId( unsigned long orig, unsigned long final );
212 
214  virtual void updateConnectionProcessParameters( unsigned long connId, unsigned long processId, MAKRti::DtString processName, MAKRti::DtString commandArgs );
215 
217  virtual bool shouldStop();
218 
219 public:
220 
222  static DtRtiMsgForwarder* create( unsigned long id, const DtRIDParameters& params );
223 
227  static void setCreatorFunction(DtRtiMsgFwderCreator fn);
228 
230  static void tcpSocketAdditionCb(DtTcpMsgSocket* sock, void* usr);
231  static void tcpSocketRemovalCb(DtTcpMsgSocket* sock, void* usr);
232 
233 protected:
234 
235  virtual void performMcastDiscovery();
236 
239  virtual void applyRegisteredFilters();
240  virtual void disableRegisteredFilters();
241 
244  virtual void waitForIo();
245 
246 
247  virtual void tcpSocketAdditionCb(DtTcpMsgSocket* sock);
248  virtual void tcpSocketRemovalCb(DtTcpMsgSocket* sock);
249 
251  virtual unsigned long consumeConnId();
252 
256  virtual void preRunLoopEvent() {};
257  virtual void runLoopEvent() {};
258  virtual void postRunLoopEvent() {};
259 
260 
261  virtual bool populateConnectionInformation(
262  unsigned int& numForwarderToForwarderConns,
263  std::vector<MAKRti::DtString>& forwarderIdentifiers,
264  std::vector<MAKRti::DtString>& forwarderConnectionHostNames,
265  std::vector<MAKRti::DtInetAddr>& forwarderConnectionAddrs,
266  unsigned int& numForwarderClientConns,
267  std::vector<MAKRti::DtString>& clientConnectionHostNames,
268  std::vector<MAKRti::DtInetAddr>& clientConnectionAddrs) const;
269 
271  virtual void closeAllConnectionsIfRequested();
272 
274  DtRtiMsgForwarder( const DtRtiMsgForwarder& orig );
275  DtRtiMsgForwarder& operator=( const DtRtiMsgForwarder& orig );
276 
277 protected:
278 
280 
283  unsigned long myForwarderId;
284 
286  MAKRti::DtInetAddr myForwarderAddr;
287 
290 
293 
296 
298  int myPort;
300 
304 
306  unsigned int myPacketBundleSize;
307 
310 
316 
319 
322 
326 
329 
331  DtThreadSafe< std::deque<DtMsgFwdrFunctor*> > myPendingProxyCommands;
332 
334  std::vector< DtMessageFilter* > myRegisteredFilters;
335 
341 
343  std::set<DtTcpMsgSocket const*> myConnectionsAboutToBeDeleted;
344 
345  MAKRti::DtSelectParamWithWrite mySelectParams;
346 
349 
350 protected:
351 
353 };
354 
355 
356 
358 {
359  return myConnToConnInfoMap;
360 }
361 
362 inline unsigned long DtRtiMsgForwarder::forwarderId() const
363 {
364  return myForwarderId;
365 }
366 
367 
368 #endif
369 

Document ID: Generated on Wed Mar 11 20:26:49 EDT 2015 from SVN revision 150939
Copyright © 2005-2015 VT MÄK Inc. All Rights Reserved (www.mak.com)