MAK RTIspy API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
asyConMgr.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 1998 MaK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
11 #ifndef VXWORKS
12 
13 #include <rtiMsConfig.h>
14 #include <connectMgr.h>
15 #include <fedAmbCallbackQueue.h>
16 
17 #include "fedAmbCallbackQueue.h"
18 
19 #include <vlutil/vlThreadSafe.h>
20 #include <vlutil/vlMutex.h>
21 #include <vlutil/vlLockfreeQueue.h>
22 
23 #ifdef _WIN32
24 #include "windows.h"
25 #else
26 #include "pthread.h"
27 #include <vlutil/vlSelectParamW.h>
28 #endif
29 
30 
31 namespace MAKRti
32 {
33  class DtSelectParamWithWrite;
34 }
36 
38 {
39 
40 public:
41 
42  DtQueuePacket( DtRtiMsg* msg,
43  MAKRti::DtTransportType transport,
44  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny() );
45 
46  ~DtQueuePacket();
47 
49  MAKRti::DtInetAddr addr;
50  MAKRti::DtTransportType transport;
51 };
52 
53 typedef MAKRti::DtLockfreeQueue<DtQueuePacket*> DtAsycQueueType;
54 
59 
61 {
62 protected:
63 
64  DtAsyncConnectionMgr( DtRIDParameters* params, bool isFederate = false,
65  std::shared_ptr<DtRtiAssistantLrcClient> assistantClient =
66  std::shared_ptr<DtRtiAssistantLrcClient>() );
67 
68 public:
69 
70  virtual ~DtAsyncConnectionMgr();
71 
77  virtual int init( DtRIDParameters* params );
78 
80  virtual void setFederateMgr( DtFederateMgr* fedMgrPtr );
81 
83  virtual void shutdown();
84 
86  virtual bool isAsynchronous();
87 
88  virtual void disconnectFederation();
89 
90  virtual void connectFederation(
91 #if defined(DtIFSPEC13) || defined(DtIFSPEC1516)
92  RTI_API::FederateAmbassador* fedAmb,
93 #endif
94  DtLogicalTimeFactory* logicalTimeFactoryPtr,
95  MAKRti::DtString fedExName,
96  DtFederateHandle fedHandle,
97  int fedExHandle );
98 
101  virtual void queueMsg( DtRtiMsg* msg,
102  MAKRti::DtTransportType transport,
103  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny() );
104 
106  virtual int send( const DtRtiMsg& msg,
107  MAKRti::DtTransportType transport,
108  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny() );
109 
112  virtual int sendAndDelete( DtRtiMsg* msg,
113  MAKRti::DtTransportType transport,
114  const MAKRti::DtInetAddr& addr = MAKRti::DtInetAddr::inaddrAny() );
115 
117  virtual bool tick();
118 
123  virtual bool processConnections();
124 
127  virtual DtRtiMsg* getMessage();
128 
130  virtual DtNetReadStatus handleMsg( DtRtiMsg& msg );
131 
136  virtual bool flush();
137 
139  virtual void receiveThread();
140  virtual void sendThread();
141 
144  virtual bool wait( MAKRti::DtTime periodInSeconds, bool unlockWhileWaiting = false );
145 
154  virtual int readFileDescriptor(DtRtiApiTransportationType transport);
155 
156 #ifdef _WIN32
157  virtual HANDLE waitEvent();
159 
162  virtual WSAEVENT readFileEvent(DtRtiApiTransportationType transport);
163 #else
164  virtual int waitEvent();
166 #endif
167 
170  virtual void signalReceiveEvent();
171 
174  virtual void clearReceiveEvent();
175 
178  virtual void signalSendEvent();
179 
182  virtual void clearSendEvent();
183 
185  virtual void yield();
186 
190  virtual bool processConnectionsInCallback();
191 
192 protected:
193 
196  virtual bool doReceiveProcessing(unsigned long timeout);
197 
199  virtual void doDisconnectFederation();
200 
202  virtual bool doWait(MAKRti::DtTime period);
203 
205  virtual void processCallbackMsg(const DtFedAmbCallbackMsg& callbackMsg);
206 
211  virtual bool sendPackets();
212 
218  virtual DtNetReadStatus receivePacket(DtRtiConnection* conn,
219  MAKRti::DtTransportType transportType, unsigned int& receivedPacketCount);
220 
225  virtual bool receivePackets();
226 
230  virtual DtNetReadStatus processMsgQueueCallbacks(DtRtiMsg& msg,
231  unsigned int& receivedPacketCount);
232 
235  virtual void processPendingMsgQueueCallbacks();
236 
238  virtual void processPendingMsgMakeCallbacks();
239 
241  virtual void setMessageTracking(DtRtiMsg& msg);
242 
245  virtual void destroyPackets();
246 
248  virtual void destroyRelConn();
249 
251  virtual void destroyAncillaryRelConn(DtRtiConnection* conn);
252 
254  virtual void destroyAncillaryRelConns();
255 
257  virtual void startAsynchronousReceiveProcessing();
258  virtual void startAsynchronousSendProcessing();
259 
261  virtual void stopAsynchronousReceiveProcessing();
262  virtual void stopAsynchronousSendProcessing();
263 
266  inline DtQueuePacket* getPacket();
267 
270  virtual bool createBestEffortConn();
271 
276  virtual bool queueReceivePacket(DtRtiMsg* rtiMessage, MAKRti::DtTransportType transportType,
277  bool& overflowWarning);
278 
281  virtual void testIoIndicator(const char* label, unsigned int queueLevel,
282  unsigned int& lowWaterLine, unsigned int& highWaterLine, bool& overflowWarning);
283 
284 public:
285 
287  static DtConnectionMgr* create( DtRIDParameters* p, bool isFederate = false,
288  std::shared_ptr<DtRtiAssistantLrcClient> assistantClient =
289  std::shared_ptr<DtRtiAssistantLrcClient>() );
290 
292 #ifdef _WIN32
293  static unsigned long runReceive( void* usr );
294  static unsigned long runSend( void* usr );
295 #else
296  static void* runReceive( void* usr );
297  static void* runSend( void* usr );
298 #endif
299 
300 protected:
301 
303  static void processCallbackMsg(const DtFedAmbCallbackMsg& callbackMsg, void* usr);
304 
305 protected:
316  bool myNonReflectedList[DtInvalidMsgKind + 1];
318 
319 #ifdef _WIN32
320  HANDLE myReceiveThreadHandle;
321  HANDLE mySendThreadHandle;
322  HANDLE myReceiveWaitEvent;
323  HANDLE* myWaitEvents;
324  HANDLE mySendWaitEvent;
325  unsigned int myNumWaitEvents;
326 #else
327  DtSelectParamWithWrite myWaitEventsParams;
330  int mySendEvent[2];
331  int myRecvEvent[2];
332 #endif
333 
334  float myIoPeriod;
336  unsigned int myMaxQueue;
337  unsigned int myMaxCount;
338 
340  unsigned int mySendPacketCount;
341  unsigned int myReadPacketCount;
342 
349 
351  DtCallbackQueue* myCallbackQueue;
352 
353  DtThreadSafe<bool> myAsynchronousConnectionIsOk;
354 
359 
362 #ifdef _WIN32
363  unsigned int myWaitEvent_BestEffortConn;
364  unsigned int myWaitEvent_PrimaryReliableConn;
365  unsigned int myWaitEvent_AncillaryReliableConnStart;
366  unsigned int myNoBestEffort;
367 #endif
368 
369  unsigned int myIoQueueIndicator;
376 
381 
382  char myRecvEventBuffer[100];
383  char mySendEventBuffer[100];
384 };
385 
386 #endif
387 
virtual void destroyAncillaryRelConn(DtRtiConnection *conn)
Destroy the given ancillary reliable connection.
pthread_t myReceiveThreadHandle
Definition: asyConMgr.h:328
unsigned int myIoQueueIndicator
These are pointers to the locations in the WaitEvent list they need to be dynamic in case one of them...
Definition: asyConMgr.h:369
virtual bool processConnections()
Check all the connections and process any incomming messages Return boolean: message was received...
virtual DtRtiMsg * getMessage()
Get a message if one exists Message must be destroyed by caller.
MAKRti::DtLockfreeQueue< DtQueuePacket * > DtAsycQueueType
Definition: asyConMgr.h:53
bool myReserved
Definition: asyConMgr.h:313
float myTickWaitPeriod
Definition: asyConMgr.h:335
DtAsycQueueType * mySendQueue
Exchange queues between federate and IO threads these lists are used in asynchronous mode...
Definition: asyConMgr.h:347
DtNetReadStatus
Definition: connection.h:21
pthread_t mySendThreadHandle
Definition: asyConMgr.h:329
virtual bool processConnectionsInCallback()
unsigned int myReadPacketCount
Definition: asyConMgr.h:341
This class manages the RTI&#39;s start-up configuration using both MTL variables and functions.
Definition: RIDparams.h:87
Definition: fedTimeFactory.h:73
virtual bool doWait(MAKRti::DtTime period)
perform actual wait. Called by wait
unsigned int mySendQueueLowWaterLine
Definition: asyConMgr.h:373
RTI_API::TransportationTypeHandle DtRtiApiTransportationType
Definition: rtiApiTypes.h:114
This class represents a network connection with another RTI component.
Definition: connection.h:38
bool myTimeToQuitSending
Definition: asyConMgr.h:306
bool mySendOverflowWarning
Definition: asyConMgr.h:375
bool myAsynchronousProcessMsg
Definition: asyConMgr.h:312
the Asynchronous Connection Mgr adds asynchronous I/O to the connectionMgr class. ...
Definition: asyConMgr.h:60
MAKRti::DtTransportType transport
Definition: asyConMgr.h:50
Includes either 1.3 or 1516 federate ambassador callback queue.
bool myTimeToQuitReceiving
Definition: asyConMgr.h:307
float myIoPeriod
Definition: asyConMgr.h:334
This file contains the declaration of the Connection Manager.
virtual int send(const DtRtiMsg &msg, MAKRti::DtTransportType transport, const MAKRti::DtInetAddr &addr=MAKRti::DtInetAddr::inaddrAny())
Sending.
virtual void setFederateMgr(DtFederateMgr *fedMgrPtr)
Set the federate manager.
bool myAsynchronousCallbacks
Definition: asyConMgr.h:311
Note: no message kind may be &gt; DtInvalidMsgKind This is a limitation imposed by the RTI Msg Header - ...
Definition: rtiMsgKind.h:162
virtual void shutdown()
Request shutdown of communication activities.
unsigned int myReceiveQueueLowWaterLine
Definition: asyConMgr.h:370
virtual void yield()
Yield processing to allow more data to arrive.
DtRtiMsg * msg
Definition: asyConMgr.h:48
virtual void disconnectFederation()
The LRC disassociates its connections from the federation.
bool myAsynchronous
Definition: asyConMgr.h:310
virtual bool flush()
Send buffered messages.
unsigned int mySendPacketCount
Number of packets until time to yield (== max count)
Definition: asyConMgr.h:340
unsigned int myMaxCount
Definition: asyConMgr.h:337
DtThreadSafe< bool > myAsynchronousConnectionIsOk
Definition: asyConMgr.h:353
Instances of DtFederateMgr process federation-level messages (such as create, destroy, join, resign, and sync points) and manages the objects responsible for handling general communication, objects, interactions, the FOM, MOM, and data distribution mmg.
Definition: fedMgr.h:93
virtual void destroyAncillaryRelConns()
Destroy ancillary reliable connections.
DtAsycQueueType * myReceiveQueue
Definition: asyConMgr.h:348
Instances of DtConnectionMgr manage the communication objects that the RTI will use to either communi...
Definition: connectMgr.h:67
int myInPostTick
Definition: asyConMgr.h:317
virtual void destroyRelConn()
Destroy reliable connection.
DtRtiMsg is the base class for messages between RTI components.
Definition: rtiMsg.h:34
DtHandle DtFederateHandle
Definition: internalTypes.h:46
unsigned int myNextReliableConnToRead
Mechanism to track which reliable connection to fetch packets from when multiple ancillary reliable c...
Definition: asyConMgr.h:358
virtual int readFileDescriptor(DtRtiApiTransportationType transport)
Returns a file descriptor on which data will be present for the given transport type whenever there i...
unsigned int mySendQueueHighWaterLine
Definition: asyConMgr.h:374
MAKRti::DtInetAddr addr
Definition: asyConMgr.h:49
Definition: asyConMgr.h:37
bool myDoDisconnect
Definition: asyConMgr.h:315
unsigned int myMaxQueue
Definition: asyConMgr.h:336
virtual bool createBestEffortConn()
Create best effort connection; Returns true if successful Could be that it already exist in which cas...
virtual bool tick()
Receiving.
bool mySendThreadActivated
Definition: asyConMgr.h:308
virtual void connectFederation(DtLogicalTimeFactory *logicalTimeFactoryPtr, MAKRti::DtString fedExName, DtFederateHandle federateHandle, int fedExHandle)
The LRC associates its federation information with its network connections.
unsigned int myReceiveQueueHighWaterLine
Definition: asyConMgr.h:371
#define DT_DLL_LRC
Definition: rtiMsConfig.h:155
bool myReceiveThreadActivated
Definition: asyConMgr.h:309
bool myShouldWaitOnCurrentBundle
This determines whether the send thread should sleep after it attempts to send all packets...
Definition: asyConMgr.h:380
virtual int init(DtRIDParameters *params)
Initialize the RTI&#39;s exercise parameters and connections Users who wish to override the MAK RTI&#39;s net...
virtual int sendAndDelete(DtRtiMsg *msg, MAKRti::DtTransportType transport, const MAKRti::DtInetAddr &addr=MAKRti::DtInetAddr::inaddrAny())
Send a message and delete the message after it has been sent Returns the size of the data sent...
virtual DtRtiMsg * create(DtRtiMsgKind kind)
Request the RTI message factory for a msg.
bool myReceiveOverflowWarning
Definition: asyConMgr.h:372
virtual DtNetReadStatus handleMsg(DtRtiMsg &msg)
Handle this message by either processing it or queuing it if save pending.
bool myMoreToFlush
Definition: asyConMgr.h:314
DtCallbackQueue * myCallbackQueue
A federate ambassador wrapper that queues up federate ambassador calls.
Definition: asyConMgr.h:351
A message that delivers stored callbacks generated by asynchronous thread.
Definition: fedAmbCallbackMsg.h:34
virtual bool wait(MAKRti::DtTime periodInSeconds, bool unlockWhileWaiting=false)
Wait for data to be ready or the given period of time to expire Return boolean: data is ready for rea...
DtSelectParamWithWrite myWaitEventsParams
Definition: asyConMgr.h:327

Document ID: Generated on Sun Jul 20 16:15:30 EDT 2025 from SVN revision 277985
Copyright © 2005-2025 MAK Technologies Inc. All Rights Reserved (www.mak.com)