VR-Link API Documentation for HLA 1.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
exerciseConnDIS.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1992-2010 VT MAK
3 ** All rights reserved.
4 *********************************************************************/
8 
9 #pragma once
10 
11 #if DtDIS
12 
13 
14 #include <vlutil/vlMachineTypes.h>
15 #include "pduCallbackManager.h"
16 #include <vlpi/disEnums.h>
17 #include "packets/pduHeader.h"
18 #include "baseExerciseConn.h"
19 #include "stateMsgDIS.h"
20 #include "interactionDIS.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 class DtOwnershipHandler;
39 class DtPduDecoderFactory;
40 class DtPduEncoderFactory;
41 
43 const DtExerciseId DtMaxExerciseId = 255;
45 const DtExerciseId DtAnyExercise = 0;
46 
57 {
58 public:
59 
60  typedef int (*DtPredicate)(DtPdu *pdu, void *arg);
61 
63  enum {
64  DtNET_READ_SUCCESS =0,
65  DtNET_READ_NO_PACKETS =1,
66  DtNET_READ_BAD_PACKET =2,
67  DtNET_READ_SERVER_MSG =3,
68  DtNET_READ_SIZE_MISMATCH =4
69  };
70  enum
71  {
72  DtPROCESS_PDU_SUCCESS =0,
73  DtPROCESS_PDU_WRONG_EXID =5,
74  DtPROCESS_PDU_NO_PDU =6,
75  DtNET_READ_FILTERED_PACKET =7
76  };
77 
86  enum InitializationStatus {
87  DtINIT_SUCCESS =0,
88  DtCOULD_NOT_CREATE_SOCKET =1
89  };
90 
91 public:
92 
99  DtExerciseConn(const DtExerciseConnInitializer& initial, InitializationStatus* status = 0);
100 
103  DtExerciseConn(int port, int exercise_id,
104  int site_id, int application_num,
105  InitializationStatus* status = 0, bool use_async_io = false,
106  bool useIpv6 = false, bool suppressSelfReflect = false);
107 
110  DtExerciseConn(int port, const DtInetAddr& destAddr, int exercise_id,
111  int site_id, int application_num, InitializationStatus* status = 0,
112  bool use_async_io = false, bool suppressSelfReflect = false);
113 
116  DtExerciseConn(DtInetSocket* skt, int exercise_id,
117  int site_id, int application_num, InitializationStatus* status = 0);
118 
120  virtual ~DtExerciseConn();
121 
122 private:
123 
125  DtExerciseConn(const DtExerciseConn& orig);
126 
129 
130 public:
131 
132 
136  virtual void addPduCallback( DtPduKind pduKind, DtPduCallbackFcn fcn, void *usr);
137 
141  virtual void removePduCallback( DtPduKind pduKind, DtPduCallbackFcn fcn, void *usr);
142 
148  virtual int drainInput(DtTime timeout=-1, int nReadPerTimeCheck=100);
149 
152  virtual int readAndProcess(void);
153 
157  virtual int processPdu(DtPdu *pdu);
158 
163  virtual DtPdu *netRead(int *retCode = 0);
164 
170  virtual void addInterestInPduKind(DtPduKind kind);
171 
177  virtual void subtractInterestInPduKind(DtPduKind kind);
178 
183  virtual DtPduKind readUntil(DtPredicate predicate, void *arg,
184  DtTime timeout, DtTime sleepTime=0.1);
185 
188  virtual void addInterestInMcastAddr(const DtInetAddr& addr);
189 
192  virtual void subtractInterestInMcastAddr(const DtInetAddr& addr);
193 
195  virtual void send(const DtStateMsg &msg);
196 
198  virtual void send(const DtInteraction &msg);
199 
201  virtual void sendStamped(const DtStateMsg &msg);
202 
204  virtual void sendStamped(const DtInteraction &msg);
205 
210  virtual int send(
211  const DtPdu &pdu, const DtInetAddr* addr = 0);
212 
218  virtual int sendStamped(
219  const DtPdu &pdu, const DtInetAddr* addr = 0);
220 
223  virtual DtInetAddr* destinationAddr(const DtPdu &pdu);
224 
231  virtual bool addDestination(const DtInetAddr& destination, DtU16 port=0);
232 
239  virtual bool removeDestination(const DtInetAddr& destination, DtU16 port=0);
240 
242  virtual void setExerciseId(int exercise_id);
243 
245  virtual DtExerciseId exerciseId() const;
246 
249  virtual const DtEventID& nextEventId();
250 
252  virtual DtInetSocket* socket();
253 
254 
262  virtual DtPduFactory *pduFactory();
263 
267  virtual DtPduEncoderFactory* pduEncoderFactory();
268 
272  virtual DtPduDecoderFactory* pduDecoderFactory();
273 
279  virtual void setPduFactory(DtPduFactory* fact);
280 
282  virtual void enableFiltering();
283 
285  virtual void disableFiltering();
286 
288  virtual void setTimeStampType(DtTimeStampType relOrAbs);
289 
291  virtual DtTimeStampType timeStampType() const;
292 
296  virtual void setTimeStampType(int relOrAbs);
297 
299  virtual DtDisObjectManager* disObjectManager();
300 
301 
305 
306  virtual void setDefaultOwnershipHandler(DtOwnershipHandler* ownershipHandler);
307  virtual DtOwnershipHandler* defaultOwnershipHandler();
308 
309 public:
310 
312  static DtString vrlinkVersion();
313 
315  static const int nSizeMismatchComplain;
316 
317 protected:
318 
319 
323  virtual DtTime currentTimeForStamping();
324 
326  void init0(int port, int exerId, int siteId, int applNum,
327  InitializationStatus* status, bool async_io, bool useIpv6,
328  bool suppressSelfReflect);
329 
331  void init0(DtInetSocket* s, int exerId, int siteId, int applNum,
332  InitializationStatus* status);
333 
334  virtual void setRemoteEndpoint( const DtInetAddr& addr, int port );
335 
337  void init(DtInetSocket* s, int deleteSkt,
338  int exerId, int siteId, int applNum, InitializationStatus* status);
339 
340  DtDisSocket* initializeSocket(const DtInetAddr& address, int port,
341  bool useAsyncIo, DtInetDevice* device, bool suppressSelfReflect);
342 
343 protected:
344  DtExerciseId myExerciseId;
345  int availEventNum;
346  int deleteSocket;
347  DtPduCallbackManager myPduCbMgr;
348  int pduInterest[DtMAX_PDU_KINDS + 1];
349  void zeroPduInterestList();
350  int nSizeMismatch;
351  bool filtering;
352  DtHashlist mcastAddrs;
353  DtPduFactory* myPduFact;
354  DtPduFactory* myDfltPduFact;
355  DtPduEncoderFactory* myPduEncFact;
356  DtPduDecoderFactory* myPduDecFact;
357  DtEventID myCurrentEventId;
358  DtTimeStampType myRelOrAbs;
359  DtDisObjectManager* myDisObjectManager;
360  DtOwnershipHandler* myOwnershipHandler;
361 
362  DtInetSocket* mySocket;
363  DtInetEndpoint myRemoteEndpoint;
364  DtInetBufferChain myBufferChain;
365  DtInetBuffer myBuffer;
366  char* myPacketBuffer;
367  DtInetEndpoint myEndpointReceivedFrom;
368 };
369 
370 
371 inline DtExerciseConn::DtExerciseConn(int po, int ex, int si,
372  int ap, InitializationStatus* status, bool use_async_io, bool useIpv6,
373  bool suppressSelfReflect)
374  : mcastAddrs()
375  , myRelOrAbs(DtTimeStampRelative)
376  , myBufferChain()
377  , myBuffer(DtDEFAULT_SOCK_BUFF_SIZE)
378  , myPacketBuffer(0)
379  , myEndpointReceivedFrom()
380  , myOwnershipHandler(0)
381 {
382  init0(po, ex, si, ap, status, use_async_io, useIpv6, suppressSelfReflect);
383 }
384 
386  DtInetSocket* so, int ex, int si,
387  int ap, InitializationStatus* status)
388  : mcastAddrs()
389  , myRelOrAbs(DtTimeStampRelative)
390  , myBufferChain()
391  , myBuffer(DtDEFAULT_SOCK_BUFF_SIZE)
392  , myPacketBuffer(0)
393  , myEndpointReceivedFrom()
394  , myOwnershipHandler(0)
395 {
396  init0(so, ex, si, ap, status);
397 }
398 
399 inline int DtExerciseConn::readAndProcess()
400 {
401  int result;
402  DtPdu *pdu = netRead(&result);
403  if (result == DtNET_READ_SUCCESS)
404  {
405  result = processPdu(pdu);
406  }
407  if (pdu)
408  {
409  delete pdu;
410  }
411  return result;
412 }
413 
414 inline DtExerciseId DtExerciseConn::exerciseId() const
415 {
416  return myExerciseId;
417 }
418 
419 inline DtPduFactory *DtExerciseConn::pduFactory()
420 {
421  return myPduFact;
422 }
423 
424 
425 inline DtPduEncoderFactory *DtExerciseConn::pduEncoderFactory()
426 {
427  return myPduEncFact;
428 }
429 
430 
431 inline DtPduDecoderFactory *DtExerciseConn::pduDecoderFactory()
432 {
433  return myPduDecFact;
434 }
435 
436 
438 {
439  return mySocket;
440 }
441 
442 inline DtDisObjectManager* DtExerciseConn::disObjectManager()
443 {
444  return myDisObjectManager;
445 }
446 
447 
448 #endif

Document ID: Generated on Thu Feb 22 04:26:36 EST 2018 from SVN revision 186468
Copyright © 2005-2016 VT MÄK. All Rights Reserved (www.mak.com)