VR-Link API Documentation for DIS
dExerciseConn.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 *********************************************************************/
8 
9 #if DtDIS
10 
11 #ifndef DtDisExerciseConn_H_
12 #define DtDisExerciseConn_H_
13 
14 #include <vlutil/vlMachineTypes.h>
15 #include "pduCbMgr.h"
16 #include <vlpi/disEnums.h>
17 #include "packets/pduHeader.h"
18 #include "baseExConn.h"
19 #include "dStateMsg.h"
20 #include "dInteraction.h"
21 #include <matrix/vlMath.h>
22 #include <vlutil/vlHashlist.h>
23 #include "pduFactory.h"
24 #include <vlutil/vlTimeStampType.h>
25 #include "eventId.h"
26 #include <vlutil/vlVersion.h>
27 
28 #include <vlutil/vlInetDevice.h>
29 #include <vlutil/vlInetEndpoint.h>
30 #include <vlutil/vlInetAddr.h>
31 #include <vlutil/vlInetSocket.h>
32 
33 class DtPdu;
34 class DtDisObjectManager;
36 class DtInetDevice;
37 class DtDisSocket;
38 
43 
54 {
55 public:
56 
57  typedef int (*DtPredicate)(DtPdu *pdu, void *arg);
58 
60  enum {
61  DtNET_READ_SUCCESS =0,
62  DtNET_READ_NO_PACKETS =1,
63  DtNET_READ_BAD_PACKET =2,
64  DtNET_READ_SERVER_MSG =3,
65  DtNET_READ_SIZE_MISMATCH =4
66  };
67  enum
68  {
69  DtPROCESS_PDU_SUCCESS =0,
70  DtPROCESS_PDU_WRONG_EXID =5,
71  DtPROCESS_PDU_NO_PDU =6,
72  DtNET_READ_FILTERED_PACKET =7
73  };
74 
84  DtINIT_SUCCESS =0,
85  DtCOULD_NOT_CREATE_SOCKET =1
86  };
87 
88 public:
89 
96  DtExerciseConn(const DtExerciseConnInitializer& initial, InitializationStatus* status = 0);
97 
100  DtExerciseConn(int port, int exercise_id,
101  int site_id, int application_num,
102  InitializationStatus* status = 0, bool use_async_io = false,
103  bool useIpv6 = false, bool suppressSelfReflect = false);
104 
107  DtExerciseConn(int port, const DtInetAddr& destAddr, int exercise_id,
108  int site_id, int application_num, InitializationStatus* status = 0,
109  bool use_async_io = false, bool suppressSelfReflect = false);
110 
113  DtExerciseConn(DtInetSocket* skt, int exercise_id,
114  int site_id, int application_num, InitializationStatus* status = 0);
115 
117  virtual ~DtExerciseConn();
118 
119 private:
120 
122  DtExerciseConn(const DtExerciseConn& orig);
123 
126 
127 public:
128 
129 
133  virtual void addPduCallback( DtPduKind pduKind, DtPduCallbackFcn fcn, void *usr);
134 
138  virtual void removePduCallback( DtPduKind pduKind, DtPduCallbackFcn fcn, void *usr);
139 
145  virtual int drainInput(DtTime timeout=-1, int nReadPerTimeCheck=100);
146 
149  virtual int readAndProcess(void);
150 
154  virtual int processPdu(DtPdu *pdu);
155 
160  virtual DtPdu *netRead(int *retCode = 0);
161 
167  virtual void addInterestInPduKind(DtPduKind kind);
168 
174  virtual void subtractInterestInPduKind(DtPduKind kind);
175 
180  virtual DtPduKind readUntil(DtPredicate predicate, void *arg,
181  DtTime timeout, DtTime sleepTime=0.1);
182 
185  virtual void addInterestInMcastAddr(const DtInetAddr& addr);
186 
189  virtual void subtractInterestInMcastAddr(const DtInetAddr& addr);
190 
192  virtual void send(const DtStateMsg &msg);
193 
195  virtual void send(const DtInteraction &msg);
196 
198  virtual void sendStamped(const DtStateMsg &msg);
199 
201  virtual void sendStamped(const DtInteraction &msg);
202 
207  virtual int send(
208  const DtPdu &pdu, const DtInetAddr* addr = 0);
209 
215  virtual int sendStamped(
216  const DtPdu &pdu, const DtInetAddr* addr = 0);
217 
220  virtual DtInetAddr* destinationAddr(const DtPdu &pdu);
221 
228  virtual bool addDestination(const DtInetAddr& destination, DtU16 port=0);
229 
236  virtual bool removeDestination(const DtInetAddr& destination, DtU16 port=0);
237 
239  virtual void setExerciseId(int exercise_id);
240 
242  virtual DtExerciseId exerciseId() const;
243 
246  virtual const DtEventID& nextEventId();
247 
249  virtual DtInetSocket* socket();
250 
251 
259  virtual DtPduFactory *pduFactory();
260 
266  virtual void setPduFactory(DtPduFactory* fact);
267 
269  virtual void enableFiltering();
270 
272  virtual void disableFiltering();
273 
275  virtual void setTimeStampType(DtTimeStampType relOrAbs);
276 
278  virtual DtTimeStampType timeStampType() const;
279 
283  virtual void setTimeStampType(int relOrAbs);
284 
286  virtual DtDisObjectManager* disObjectManager();
287 
288 public:
289 
291  static DtString vrlinkVersion();
292 
294  static const int nSizeMismatchComplain;
295 
296 protected:
297 
298 
302  virtual DtTime currentTimeForStamping();
303 
305  void init0(int port, int exerId, int siteId, int applNum,
306  InitializationStatus* status, bool async_io, bool useIpv6,
307  bool suppressSelfReflect);
308 
310  void init0(DtInetSocket* s, int exerId, int siteId, int applNum,
311  InitializationStatus* status);
312 
313  virtual void setRemoteEndpoint( const DtInetAddr& addr, int port );
315 
316  void init(DtInetSocket* s, int deleteSkt,
317  int exerId, int siteId, int applNum, InitializationStatus* status);
318 
319  DtDisSocket* initializeSocket(const DtInetAddr& address, int port,
320  bool useAsyncIo, DtInetDevice* device, bool suppressSelfReflect);
321 
322 protected:
327  int pduInterest[DtMAX_PDU_KINDS + 1];
328  void zeroPduInterestList();
330  bool filtering;
337 
344 };
345 
346 
347 inline DtExerciseConn::DtExerciseConn(int po, int ex, int si,
348  int ap, InitializationStatus* status, bool use_async_io, bool useIpv6,
349  bool suppressSelfReflect)
350  : mcastAddrs()
351  , myRelOrAbs(DtTimeStampRelative)
352  , myBufferChain()
353  , myBuffer(DtDEFAULT_SOCK_BUFF_SIZE)
354  , myPacketBuffer(0)
355  , myEndpointReceivedFrom()
356 {
357  init0(po, ex, si, ap, status, use_async_io, useIpv6, suppressSelfReflect);
358 }
359 
361  DtInetSocket* so, int ex, int si,
362  int ap, InitializationStatus* status)
363  : mcastAddrs()
364  , myRelOrAbs(DtTimeStampRelative)
365  , myBufferChain()
366  , myBuffer(DtDEFAULT_SOCK_BUFF_SIZE)
367  , myPacketBuffer(0)
368  , myEndpointReceivedFrom()
369 {
370  init0(so, ex, si, ap, status);
371 }
372 
374 {
375  int result;
376  DtPdu *pdu = netRead(&result);
377  if (result == DtNET_READ_SUCCESS)
378  {
379  result = processPdu(pdu);
380  }
381  if (pdu)
382  {
383  delete pdu;
384  }
385  return result;
386 }
387 
389 {
390  return myExerciseId;
391 }
392 
394 {
395  return myPduFact;
396 }
397 
399 {
400  return mySocket;
401 }
402 
404 {
405  return myDisObjectManager;
406 }
407 
408 
409 #endif
410 #endif
411 
412 

Document ID: Generated on Wed Aug 14 15:35:11 EDT 2013 from SVN revision 130445
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)