![]() |
VR-Link API Documentation for DIS
|
00001 /********************************************************************* 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 #pragma once 00006 00009 00010 00011 00012 #include <stdlib.h> 00013 #include "packets/pduHeader.h" 00014 #include <vlpi/disEnums.h> 00015 #include <vlutil/vlTimeStampType.h> 00016 #include <vlutil/vlBaseMsg.h> 00017 00018 00019 #define DtSTATUS_OK 0 00020 #define DtSTATUS_NOT_OK 1 00021 00022 extern DT_DLL_VL int DtProtocolVersionToSend; 00023 extern DT_DLL_VL int DtProtocolVersionToRecvMin; 00024 extern DT_DLL_VL int DtProtocolVersionToRecvMax; 00025 00029 class DT_DLL_VL DtPdu : public DtBaseMsg 00030 { 00031 public: 00032 00034 virtual ~DtPdu(); 00035 00037 DtPdu(const DtPdu &pdu, 00038 DtBufferPtr buffer = DtUSE_INTERNAL_BUFFER); 00039 00041 DtPdu &operator=(const DtPdu &pdu); 00042 00045 virtual void* packet() const; 00046 00049 virtual int status() const; 00050 00052 virtual void setVersion(int vers); 00053 virtual int protocolVersion() const; 00054 00056 virtual void setExerciseId(int id); 00057 virtual int exerciseId() const; 00058 00060 virtual DtPduKind kind() const; 00061 00063 virtual DtProtocolFamily protocolFamily() const; 00064 00068 virtual void setTimeStamp(DtTime time, 00069 DtTimeStampType type = DtTimeStampRelative); 00070 00073 virtual DtTime timeStamp() const; 00074 00076 virtual DtTimeStampType timeStampType() const; 00077 00082 virtual DtTime guessTimeValid(DtTime referenceTime) const; 00083 00085 virtual DtNetPduHeader* netHeader() const; 00086 00088 virtual void print() const; 00089 00092 virtual void printToStream(std::ostream& stream) const; 00093 00095 virtual void printHeader() const; 00096 00098 virtual void printHeaderToStream(std::ostream& stream) const; 00099 00100 00106 virtual void printData() const; 00107 virtual void printDataToStream(std::ostream& stream) const; 00108 virtual void printDataToString(DtString& str) const; 00109 00110 protected: 00111 00114 DtPdu(); 00115 00117 virtual void setStatus(int okStatus); 00118 00121 virtual void initPdu(int size, DtBufferPtr buffer); 00122 00124 virtual void initPdu(const void* initial, DtBufferPtr buffer); 00125 00127 virtual DtPduKind internalGetPduKind() const = 0; 00128 00130 virtual DtProtocolFamily kindToFamily(DtPduKind kind) const; 00131 00133 virtual void sizeChanged(int size); 00134 00136 virtual void clearData(); 00137 00139 virtual void initHeader(DtPduKind kind, int size); 00140 00141 protected: 00142 00143 int myOKStatus; 00144 }; 00145 00146 #define netPdu packet() 00147 00148 inline DtNetPduHeader* DtPdu::netHeader() const 00149 { 00150 return (DtNetPduHeader*) netRep(); 00151 } 00152 00153 inline void* DtPdu::packet() const 00154 { 00155 return (void*) netRep(); 00156 } 00157 00158 inline int DtPdu::protocolVersion() const 00159 { 00160 return netHeader()->version; 00161 } 00162 00163 inline int DtPdu::exerciseId() const 00164 { 00165 return netHeader()->DtExercise; 00166 } 00167 00168 inline DtPduKind DtPdu::kind() const 00169 { return DtPduKind(netHeader()->DtKind); 00170 } 00171 00172 inline DtProtocolFamily DtPdu::protocolFamily() const 00173 { 00174 return DtProtocolFamily(netHeader()->family); 00175 } 00176 00177 inline DtTime DtPdu::timeStamp() const 00178 { 00179 return netHeader()->DtTime.time(); 00180 } 00181 00182 inline DtTimeStampType DtPdu::timeStampType() const 00183 { 00184 return netHeader()->DtTime.type(); 00185 } 00186 00187 inline void DtPdu::setExerciseId(int id) 00188 { 00189 netHeader()->DtExercise = id; 00190 } 00191 00192 inline void DtPdu::setTimeStamp(DtTime time, DtTimeStampType relOrAbs) 00193 { 00194 netHeader()->DtTime = DtNetTimeStamp(time, relOrAbs); 00195 } 00196 00197 inline int DtPdu::status() const 00198 { 00199 return myOKStatus; 00200 } 00201 00202 inline void DtPdu::setStatus(int okStatus) 00203 { 00204 myOKStatus = okStatus; 00205 } 00206 00207 inline void DtPdu::setVersion(int vers) 00208 { 00209 netHeader()->version = (unsigned char) (DtU32) vers; 00210 } 00211 00212 00213 00214