VR-Link API Documentation for HLA 1516
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 "pduEncoderFactory.h"
22 #include <matrix/vlMath.h>
23 #include <vlutil/vlHashlist.h>
24 #include "pduFactory.h"
25 #include <vlutil/vlTimeStampType.h>
26 #include "eventId.h"
27 #include <vlutil/vlVersion.h>
28 #include "pduDecoderFactory.h"
29 
30 #include <vlutil/vlInetDevice.h>
31 #include <vlutil/vlInetEndpoint.h>
32 #include <vlutil/vlInetAddr.h>
33 #include <vlutil/vlInetSocket.h>
34 
35 class DtPdu;
36 class DtDisObjectManager;
38 class DtInetDevice;
39 class DtDisSocket;
40 
42 const DtExerciseId DtMaxExerciseId = 255;
44 const DtExerciseId DtAnyExercise = 0;
45 
56 {
57 public:
58 
59  typedef int (*DtPredicate)(DtPdu *pdu, void *arg);
60 
62  enum {
63  DtNET_READ_SUCCESS =0,
64  DtNET_READ_NO_PACKETS =1,
65  DtNET_READ_BAD_PACKET =2,
66  DtNET_READ_SERVER_MSG =3,
67  DtNET_READ_SIZE_MISMATCH =4
68  };
69  enum
70  {
71  DtPROCESS_PDU_SUCCESS =0,
72  DtPROCESS_PDU_WRONG_EXID =5,
73  DtPROCESS_PDU_NO_PDU =6,
74  DtNET_READ_FILTERED_PACKET =7
75  };
76 
85  enum InitializationStatus {
86  DtINIT_SUCCESS =0,
87  DtCOULD_NOT_CREATE_SOCKET =1
88  };
89 
90 public:
91 
98  DtExerciseConn(const DtExerciseConnInitializer& initial, InitializationStatus* status = 0);
99 
102  DtExerciseConn(int port, int exercise_id,
103  int site_id, int application_num,
104  InitializationStatus* status = 0, bool use_async_io = false,
105  bool useIpv6 = false, bool suppressSelfReflect = false);
106 
109  DtExerciseConn(int port, const DtInetAddr& destAddr, int exercise_id,
110  int site_id, int application_num, InitializationStatus* status = 0,
111  bool use_async_io = false, bool suppressSelfReflect = false);
112 
115  DtExerciseConn(DtInetSocket* skt, int exercise_id,
116  int site_id, int application_num, InitializationStatus* status = 0);
117 
119  virtual ~DtExerciseConn();
120 
121 private:
122 
124  DtExerciseConn(const DtExerciseConn& orig);
125 
128 
129 public:
130 
131 
135  virtual void addPduCallback( DtPduKind pduKind, DtPduCallbackFcn fcn, void *usr);
136 
140  virtual void removePduCallback( DtPduKind pduKind, DtPduCallbackFcn fcn, void *usr);
141 
147  virtual int drainInput(DtTime timeout=-1, int nReadPerTimeCheck=100);
148 
151  virtual int readAndProcess(void);
152 
156  virtual int processPdu(DtPdu *pdu);
157 
162  virtual DtPdu *netRead(int *retCode = 0);
163 
169  virtual void addInterestInPduKind(DtPduKind kind);
170 
176  virtual void subtractInterestInPduKind(DtPduKind kind);
177 
182  virtual DtPduKind readUntil(DtPredicate predicate, void *arg,
183  DtTime timeout, DtTime sleepTime=0.1);
184 
187  virtual void addInterestInMcastAddr(const DtInetAddr& addr);
188 
191  virtual void subtractInterestInMcastAddr(const DtInetAddr& addr);
192 
194  virtual void send(const DtStateMsg &msg);
195 
197  virtual void send(const DtInteraction &msg);
198 
200  virtual void sendStamped(const DtStateMsg &msg);
201 
203  virtual void sendStamped(const DtInteraction &msg);
204 
209  virtual int send(
210  const DtPdu &pdu, const DtInetAddr* addr = 0);
211 
217  virtual int sendStamped(
218  const DtPdu &pdu, const DtInetAddr* addr = 0);
219 
222  virtual DtInetAddr* destinationAddr(const DtPdu &pdu);
223 
230  virtual bool addDestination(const DtInetAddr& destination, DtU16 port=0);
231 
238  virtual bool removeDestination(const DtInetAddr& destination, DtU16 port=0);
239 
241  virtual void setExerciseId(int exercise_id);
242 
244  virtual DtExerciseId exerciseId() const;
245 
248  virtual const DtEventID& nextEventId();
249 
251  virtual DtInetSocket* socket();
252 
253 
261  virtual DtPduFactory *pduFactory();
262 
268  virtual void setPduFactory(DtPduFactory* fact);
269 
271  virtual void enableFiltering();
272 
274  virtual void disableFiltering();
275 
277  virtual void setTimeStampType(DtTimeStampType relOrAbs);
278 
280  virtual DtTimeStampType timeStampType() const;
281 
285  virtual void setTimeStampType(int relOrAbs);
286 
288  virtual DtDisObjectManager* disObjectManager();
289 
290 public:
291 
293  static DtString vrlinkVersion();
294 
296  static const int nSizeMismatchComplain;
297 
298 protected:
299 
300 
304  virtual DtTime currentTimeForStamping();
305 
307  void init0(int port, int exerId, int siteId, int applNum,
308  InitializationStatus* status, bool async_io, bool useIpv6,
309  bool suppressSelfReflect);
310 
312  void init0(DtInetSocket* s, int exerId, int siteId, int applNum,
313  InitializationStatus* status);
314 
315  virtual void setRemoteEndpoint( const DtInetAddr& addr, int port );
317 
318  void init(DtInetSocket* s, int deleteSkt,
319  int exerId, int siteId, int applNum, InitializationStatus* status);
320 
321  DtDisSocket* initializeSocket(const DtInetAddr& address, int port,
322  bool useAsyncIo, DtInetDevice* device, bool suppressSelfReflect);
323 
324 protected:
325  DtExerciseId myExerciseId;
326  int availEventNum;
327  int deleteSocket;
328  DtPduCallbackManager myPduCbMgr;
329  int pduInterest[DtMAX_PDU_KINDS + 1];
330  void zeroPduInterestList();
331  int nSizeMismatch;
332  bool filtering;
333  DtHashlist mcastAddrs;
334  DtPduFactory* myPduFact;
335  DtPduFactory* myDfltPduFact;
336  DtEventID myCurrentEventId;
337  DtTimeStampType myRelOrAbs;
338  DtDisObjectManager* myDisObjectManager;
339 
340  DtInetSocket* mySocket;
341  DtInetEndpoint myRemoteEndpoint;
342  DtInetBufferChain myBufferChain;
343  DtInetBuffer myBuffer;
344  char* myPacketBuffer;
345  DtInetEndpoint myEndpointReceivedFrom;
346 };
347 
348 
349 inline DtExerciseConn::DtExerciseConn(int po, int ex, int si,
350  int ap, InitializationStatus* status, bool use_async_io, bool useIpv6,
351  bool suppressSelfReflect)
352  : mcastAddrs()
353  , myRelOrAbs(DtTimeStampRelative)
354  , myBufferChain()
355  , myBuffer(DtDEFAULT_SOCK_BUFF_SIZE)
356  , myPacketBuffer(0)
357  , myEndpointReceivedFrom()
358 {
359  init0(po, ex, si, ap, status, use_async_io, useIpv6, suppressSelfReflect);
360 }
361 
363  DtInetSocket* so, int ex, int si,
364  int ap, InitializationStatus* status)
365  : mcastAddrs()
366  , myRelOrAbs(DtTimeStampRelative)
367  , myBufferChain()
368  , myBuffer(DtDEFAULT_SOCK_BUFF_SIZE)
369  , myPacketBuffer(0)
370  , myEndpointReceivedFrom()
371 {
372  init0(so, ex, si, ap, status);
373 }
374 
375 inline int DtExerciseConn::readAndProcess()
376 {
377  int result;
378  DtPdu *pdu = netRead(&result);
379  if (result == DtNET_READ_SUCCESS)
380  {
381  result = processPdu(pdu);
382  }
383  if (pdu)
384  {
385  delete pdu;
386  }
387  return result;
388 }
389 
390 inline DtExerciseId DtExerciseConn::exerciseId() const
391 {
392  return myExerciseId;
393 }
394 
395 inline DtPduFactory *DtExerciseConn::pduFactory()
396 {
397  return myPduFact;
398 }
399 
401 {
402  return mySocket;
403 }
404 
405 inline DtDisObjectManager* DtExerciseConn::disObjectManager()
406 {
407  return myDisObjectManager;
408 }
409 
410 
411 #endif

Document ID: Generated on Wed Oct 23 22:25:48 EDT 2013 from SVN revision 132765
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)