![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1998 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: rtiMsg.h,v $ $Revision: 1.109 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef DtRtiMsg_H_ 00013 #define DtRtiMsg_H_ 00014 00015 #include <memory> 00016 #include "netRtiMsgHdr.h" 00017 #include <vlutil/vlBaseMsg.h> 00018 #include "internalTypes.h" 00019 #include <vlutil/vlString.h> 00020 00021 #if defined(DtIFSPEC1516) || defined(DtIFSPEC1516E) 00022 #include <RTI/Handle.h> 00023 #include <RTI/Typedefs.h> 00024 #include <RTI/LogicalTime.h> 00025 #include <RTI/LogicalTimeInterval.h> 00026 #else 00027 #ifdef DtIFSPEC13DLC 00028 #include "RTI13.h" 00029 #define RTI rti13 00030 #else 00031 #include "RTI.hh" 00032 #endif 00033 #endif 00034 00035 #include "bitMask.h" 00036 00037 class DtLogicalTimeFactory; 00038 00039 #define MSG_STATUS_OK 0 00040 #define MSG_STATUS_NOT_OK 1 00041 00042 enum DtRtiMsgKind 00043 { 00044 DtInteractionRoMsgKind = 0, 00045 DtUpdateRoMsgKind = 1, 00046 DtDeleteRoMsgKind = 2, 00047 DtCreateMsgKind = 3, 00048 DtCreateResponseMsgKind = 4, 00049 DtJoinMsgKind = 5, 00050 DtJoinResponseMsgKind = 6, 00051 DtResignMsgKind = 7, 00052 DtDestroyMsgKind = 8, 00053 DtDestroyResponseMsgKind = 9, 00054 DtPubInterMsgKind = 10, 00055 DtUnpubInterMsgKind = 11, 00056 DtSubInterMsgKind = 12, 00057 DtUnsubInterMsgKind = 13, 00058 DtSubObjMsgKind = 14, 00059 DtUnsubObjMsgKind = 15, 00060 DtPubObjMsgKind = 16, 00061 DtUnpubObjMsgKind = 17, 00062 DtRequestMsgKind = 18, 00063 DtSyncPointMsgKind = 19, 00064 DtOwnershipMsgKind = 20, 00065 DtRegObjMsgKind = 21, 00066 DtLocDelMsgKind = 22, 00067 DtDdmInteractionRoMsgKind = 23, 00068 DtDdmUpdateRoMsgKind = 24, 00069 DtNotifyRegMsgKind = 25, 00070 DtDeleteRegMsgKind = 26, 00071 DtAssocPubRegMsgKind = 27, 00072 DtAssocSubRegMsgKind = 28, 00073 DtObjRegSetMsgKind = 29, 00074 DtInterRegSetMsgKind = 30, 00075 DtJoinConfirmMsgKind = 31, 00076 DtAliveMsgKind = 32, 00077 DtSaveRequestMsgKind = 33, 00078 DtSaveInitiateMsgKind = 34, 00079 DtSaveCompleteMsgKind = 35, 00080 DtSaveFinishedMsgKind = 36, 00081 DtRestoreRequestMsgKind = 37, 00082 DtRestoreReplyMsgKind = 38, 00083 DtRestoreMsgKind = 39, 00084 DtRestoreCompleteMsgKind = 40, 00085 DtRestoreEndMsgKind = 41, 00086 DtTimeRegMsgKind = 42, 00087 DtRegulationRequestMsgKind = 43, 00088 DtRegulationResponseMsgKind = 44, 00089 DtInteractionTsoMsgKind = 45, 00090 DtUpdateTsoMsgKind = 46, 00091 DtDeleteTsoMsgKind = 47, 00092 DtDdmInteractionTsoMsgKind = 48, 00093 DtDdmUpdateTsoMsgKind = 49, 00094 DtEnableRegulationMsgKind = 50, 00095 DtRegulationEnabledMsgKind = 51, 00096 DtEnableConstrainedMsgKind = 52, 00097 DtConstrainedEnabledMsgKind = 53, 00098 DtTimeAdvanceRequestMsgKind = 54, 00099 DtNextEventRequestMsgKind = 55, 00100 DtLbtsMsgKind = 56, 00101 DtNerLbtsMsgKind = 57, 00102 DtDisableMsgKind = 58, 00103 DtSyncConstrainedMsgKind = 59, 00104 DtConstrainedSyncMsgKind = 60, 00105 DtResumeConstrainedMsgKind = 61, 00106 DtRetractMsgKind = 62, 00107 DtSaveRequestTsoMsgKind = 63, 00108 DtSaveTimeMsgKind = 64, 00109 DtSaveTimeAdvanceMsgKind = 65, 00110 DtSaveResponseMsgKind = 66, 00111 DtRestoreBegunMsgKind = 67, 00112 DtRestoreInitiateMsgKind = 68, 00113 DtDesignatedFederateMsgKind = 69, 00114 DtSaveBegunMsgKind = 70, 00115 DtDiscObjMsgKind = 71, 00116 DtReqDiscObjMsgKind = 72, 00117 DtConnectMsgKind = 73, 00118 DtDisconnectMsgKind = 74, 00119 DtFedFileRequestMsgKind = 75, 00120 DtFedFileDistributionMsgKind = 76, 00121 DtReserveNameMsgKind = 77, 00122 DtNameReservedMsgKind = 78, 00123 DtQuerySaveStatusMsgKind = 79, 00124 DtSaveStatusMsgKind = 80, 00125 DtQueryRestoreStatusMsgKind = 81, 00126 DtRestoreStatusMsgKind = 82, 00127 DtSyncPointQueryMsgKind = 83, 00128 DtRegionRealizationMsgKind = 84, 00129 DtRtiExecHandshakeMsgKind = 85, 00130 DtRtiExecDisconnectMsgKind = 86, 00131 DtRtiExecConnectMsgKind = 87, 00132 DtForwarderPingMsgKind = 88, 00133 DtForwarderCounterMsgKind = 89, 00134 DtForwarderResignMsgKind = 90, 00135 DtForwarderConnectionLostMsgKind = 91, 00136 DtMulticastDiscoveryMsgKind = 92, 00137 DtSaveInitiateConstrainedMsgKind = 93, 00138 DtInitiatedSaveMsgKind = 94, 00139 DtReconnectMsgKind = 95, 00140 DtMcastConfigureMsgKind = 96, 00141 DtSmEnrollmentMsgKind = 97, 00142 DtWwwControlMsgKind = 98, 00143 DtWwwControlRspMsgKind = 99, 00144 DtWwwFederateStateReqMsgKind = 100, 00145 DtWwwFederateStateRspMsgKind = 101, 00146 DtWwwStateReqMsgKind = 102, 00147 DtWwwStateRspMsgKind = 103, 00148 DtRidTestRequestMsgKind = 104, 00149 DtTransferRidParamsMsgKind = 105, 00150 DtNetworkMapReqMsgKind = 106, 00151 DtNetworkMapRspMsgKind = 107, 00152 DtCallbackMsgKind = 108, 00153 DtFomModuleRequestMsgKind = 109, 00154 DtFomModuleDistributionMsgKind = 110, 00155 DtConnectConfirmMsgKind = 111, 00156 DtEnableDisableNetworkTestingMsgKind = 112, 00157 DtChangeLatencyTestModeMsgKind = 113, 00158 DtLatencyReportMsgKind = 114, 00159 DtTestMgrStatusMsgKind = 115, 00160 DtDeleteSocketMsgKind = 116, 00161 DtJoinLightWeightMsgKind = 117, 00162 DtPartnerFederateMsgKind = 118, 00163 DtForwarderNodeInfoMsgKind = 119, 00164 DtRtiExecShutdownForwarderMsgKind = 120, 00165 DtMacAddrMsgKind = 121, 00166 DtQueueFullMsgKind = 122, 00167 DtAbortSaveMsgKind = 123, 00168 DtAbortRestoreMsgKind = 124, 00169 DtListFederationsMsgKind = 125, 00170 DtReportFederationsMsgKind = 126, 00171 DtQueryTransportMsgKind = 127, 00172 DtQueryInterTransportMsgKind = 128, 00173 DtResignDirectiveMsgKind = 129, 00174 DtReserveMultiNameMsgKind = 130, 00175 DtMultiNameReservedMsgKind = 131, 00176 DtReleaseMultiNameMsgKind = 132, 00177 DtForwarderPortMsgKind = 133, 00178 00183 DtInvalidMsgKind = 255 00184 }; 00185 00186 00188 class DT_DLL_LRC DtRtiMsg : public MAKRti::DtBaseMsg 00189 { 00190 public: 00191 00193 virtual ~DtRtiMsg(); 00194 00198 virtual DtRtiMsg* clone(bool copy = true) const =0; 00199 00202 virtual DtRtiMsg* cloneWithTransport(bool copy = true) const; 00203 00205 virtual DtNetMsgHeader* netHeader() const; 00206 00208 virtual int version() const; 00209 00211 virtual bool isValidVersion() const; 00212 00224 00226 virtual void setFedEx(const MAKRti::DtString& name); 00227 00229 virtual void setFedEx(int handle); 00230 00234 virtual bool isForExec(const MAKRti::DtString& execName, int execHandle) const; 00235 00239 00240 00241 00242 virtual const MAKRti::DtString fedExName() const; 00245 virtual int fedExHandle() const; 00247 00249 00250 virtual void setFederateHandle(DtFederateHandle handle); 00251 virtual DtFederateHandle federateHandle() const; 00253 00255 00256 virtual void setSequenceNumber(unsigned long value); 00257 virtual unsigned long sequenceNumber() const; 00259 00261 00262 virtual void setServiceCallNumber(unsigned long value); 00263 virtual unsigned long serviceCallNumber() const; 00265 00268 00269 virtual void setTriggerMessageNumber(unsigned long value); 00270 virtual unsigned long triggerMessageNumber() const; 00272 00274 virtual DtRtiMsgKind msgKind() const; 00275 00277 virtual const char* kindString() const; 00278 00280 virtual bool isConstrained() const; 00281 00283 virtual bool isAllowedDuringSave() const; 00284 00288 #ifdef DtIFSPEC1516 00289 virtual void setTime(const rti1516::LogicalTime& time); 00290 virtual rti1516::LogicalTime const * time( 00291 DtLogicalTimeFactory* fedTimeFactory) const; 00292 #elif defined(DtIFSPEC1516E) 00293 virtual void setTime(const rti1516e::LogicalTime& time); 00294 virtual rti1516e::LogicalTime const * time( 00295 DtLogicalTimeFactory* fedTimeFactory) const; 00296 #else 00297 virtual void setTime(const RTI::FedTime& time); 00298 virtual RTI::FedTime const * time( 00299 DtLogicalTimeFactory* fedTimeFactory) const; 00300 #endif 00301 00303 virtual bool hasTime() const; 00304 00308 virtual void setSerialNumber(unsigned long serialNumberValue); 00309 virtual unsigned long serialNumber() const; 00310 00312 virtual void setTransportType(DtTransportHandle type); 00313 virtual DtTransportHandle transportType() const; 00314 00316 virtual DtOrderHandle orderType() const; 00317 00319 virtual bool isMetadataPresent() const; 00320 00327 virtual bool addMetadata( caddr_t* mtdAddr, unsigned int size, 00328 unsigned int* alignPad, unsigned int* headerPad = NULL ); 00329 00332 virtual void removeMetadata( unsigned int size ); 00333 00336 bool isInteractionMsgType() const; 00337 bool isUpdateMsgType() const; 00338 00339 00340 00342 virtual void print(DtLogicalTimeFactory* logicalTimeFactory) const; 00343 virtual void printHeader(DtLogicalTimeFactory* logicalTimeFactory) const; 00344 virtual void printData(DtLogicalTimeFactory* logicalTimeFactory) const; 00345 00347 #ifdef DtIFSPEC1516 00348 virtual void printTime(const char* label, 00349 rti1516::LogicalTime const * timeValue) const; 00350 00352 virtual void printInterval(const char* label, 00353 rti1516::LogicalTimeInterval const* intervalValue) const; 00354 #elif defined(DtIFSPEC1516E) 00355 virtual void printTime(const char* label, 00356 rti1516e::LogicalTime const * timeValue) const; 00357 00359 virtual void printInterval(const char* label, 00360 rti1516e::LogicalTimeInterval const* intervalValue) const; 00361 #else 00362 virtual void printTime(const char* label, 00363 RTI::FedTime const * timeValue) const; 00364 00366 virtual void printInterval(const char* label, 00367 RTI::FedTime const* intervalValue) const; 00368 #endif 00369 00371 virtual int status() const; 00372 00373 public: 00374 00376 static const char* kindToString(DtRtiMsgKind kind); 00377 00379 static const char* kindString(const void *buffer); 00380 00382 static void setDefaultRegionSet(unsigned long defaultRegionSet); 00383 00385 static void setUse32BitsForValueSize(bool use32BitsForValueSizeEnabled); 00386 static bool use32BitsForValueSize(); 00387 00389 static void setSmartForwardingEnabled( bool enabled ); 00390 static bool smartForwardingEnabled(); 00391 00392 public: 00393 static unsigned long theDefaultRegionSetHandle; 00394 #ifdef DtIFSPEC1516 00395 static const rti1516::VariableLengthData theDefaultTag; 00396 #elif defined(DtIFSPEC1516E) 00397 static const rti1516e::VariableLengthData theDefaultTag; 00398 #else 00399 static const char* theDefaultTag; 00400 #endif 00401 00402 protected: 00403 00405 DtRtiMsg(); 00406 00407 virtual DtRtiMsgKind internalDtRtiMsgKind() = 0; 00408 00411 virtual void sizeChanged(int size); 00412 00414 void initDtRtiMsg(int size, DtRtiMsgKind msgKindVal, DtBufferPtr buffer); 00415 void initDtRtiMsg(const void *initial, int size, DtBufferPtr buffer); 00416 void initDtRtiMsg(const DtNetMsgHeader *header, DtBufferPtr buffer); 00417 00420 virtual void adjustBytes(int offset, int numBytes); 00421 00425 virtual void adjustBytes(void *address, int numBytes); 00426 00427 protected: 00428 00429 DtTransportHandle myTransportType; 00430 DtOrderHandle myOrderType; 00431 #ifdef DtIFSPEC1516 00432 rti1516::LogicalTime* myFedTime; 00433 #elif defined(DtIFSPEC1516E) 00434 rti1516e::LogicalTime* myFedTime; 00435 #else 00436 RTI::FedTime * myFedTime; 00437 #endif 00438 bool myTimeIsValid; 00439 bool myConstrained; 00440 bool myAllowedDuringSave; 00441 unsigned long mySerialNumber; 00442 unsigned long myServiceCallNumber; 00443 unsigned long myTriggerMessage; 00444 00445 protected: 00446 00447 static bool theUse32BitsForValueSize; 00448 00449 static bool theSmartForwardingEnabled; 00450 }; 00451 00452 inline DtNetMsgHeader* DtRtiMsg::netHeader() const 00453 { 00454 return (DtNetMsgHeader*) netRep(); 00455 } 00456 00457 inline DtRtiMsgKind DtRtiMsg::msgKind() const 00458 { 00459 return DtRtiMsgKind((DtU32) (DtU8) netHeader()->msgKind); 00460 } 00461 00462 inline int DtRtiMsg::status() const 00463 { 00464 return MSG_STATUS_OK; 00465 } 00466 00467 inline DtFederateHandle DtRtiMsg::federateHandle() const 00468 { 00469 return (DtFederateHandle) (DtU16) netHeader()->fedHandle; 00470 } 00471 00472 00473 inline void DtRtiMsg::adjustBytes(int offset, int numBytes) 00474 { 00475 if (numBytes > 0) 00476 insertBytes(offset, numBytes); 00477 else 00478 if (numBytes < 0) 00479 deleteBytes(offset, -numBytes); 00480 } 00481 00482 inline void DtRtiMsg::adjustBytes(void *address, int numBytes) 00483 { 00484 if (numBytes > 0) 00485 insertBytes(address, numBytes); 00486 else 00487 if (numBytes < 0) 00488 deleteBytes(address, -numBytes); 00489 } 00490 00491 #endif 00492