![]() |
MAK RTIspy API Documentation for HLA 1516
|
00001 /********************************************************************* 00002 ** Copyright (c) 1998 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: syncPointMsg.h,v $ $Revision: 1.25 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef DtSyncPointMsg_H_ 00013 #define DtSyncPointMsg_H_ 00014 00015 #include "rtiMsg.h" 00016 #include <vlutil/vlUtil.h> 00017 #include "netSyncMsg.h" 00018 00019 class DtConnectionMgr; 00020 class DtSyncPointMsg; 00021 class DtFederateHandleSet; 00022 00023 typedef void (*DtSyncPointCb)(const DtSyncPointMsg& msg, void* usr); 00024 00025 enum DtSyncMsgType 00026 { 00027 DtRegister, 00028 DtAchieved, 00029 DtAchievedUnsuccessfully, 00030 DtSynchronized, 00031 DtAnnouncePt, 00032 DtSyncPointRegSucceeded, 00033 DtSyncPointRegFailed 00034 }; 00035 00036 enum DtSyncPointStatus 00037 { 00038 DtSyncStatusSucceeded, 00039 DtSyncStatusFailLabelNotUnique, 00040 DtSyncStatusFailMemberNotJoined, 00041 DtSyncStatusFailResignDuringSync, 00042 DtSyncStatusFailRtiInternal, 00043 DtSyncStatusFailTimeNotHonored 00044 }; 00045 00046 class DT_DLL_LRC DtSyncPointMsg : public DtRtiMsg 00047 { 00048 public: 00049 00051 DtSyncPointMsg(DtBufferPtr buffer = DtUSE_INTERNAL_BUFFER); 00052 00053 DtSyncPointMsg( 00054 DtSyncMsgType kind, 00055 DtFederateHandle id, 00056 DtSyncPointStatus statusValue, 00057 char const * name, 00058 #ifdef DtIFSPEC1516 00059 rti1516::VariableLengthData const* tag, 00060 #elif defined(DtIFSPEC1516E) 00061 rti1516e::VariableLengthData const* tag, 00062 #else 00063 char const * tag, 00064 #endif 00065 const DtFederateHandleSet* set = NULL, 00066 const DtFederateHandleSet* unsuccessfulSet = NULL, 00067 DtBufferPtr buffer = DtUSE_INTERNAL_BUFFER); 00068 00070 DtSyncPointMsg(const DtNetSyncMsg* netRepMsg, 00071 DtBufferPtr buffer = DtUSE_INTERNAL_BUFFER); 00072 00074 virtual ~DtSyncPointMsg(); 00075 00077 virtual DtRtiMsg* clone(bool copy = true) const; 00078 00080 virtual void set( 00081 DtSyncMsgType kind, 00082 DtFederateHandle id, 00083 DtSyncPointStatus statusValue, 00084 char const * name, 00085 #ifdef DtIFSPEC1516 00086 rti1516::VariableLengthData const* tag, 00087 #elif defined(DtIFSPEC1516E) 00088 rti1516e::VariableLengthData const* tag, 00089 #else 00090 char const * tag, 00091 #endif 00092 DtFederateHandleSet const* set = NULL, 00093 DtFederateHandleSet const* unsuccessfulSet = NULL); 00094 00096 virtual void setSyncMsgKind(DtSyncMsgType kind); 00097 virtual DtSyncMsgType syncMsgKind() const; 00098 00100 virtual void setFederateId(DtFederateHandle id); 00101 virtual DtFederateHandle federateId() const; 00102 00104 virtual void setSyncPointStatus(DtSyncPointStatus statusValue); 00105 virtual DtSyncPointStatus syncPointStatus() const; 00106 00108 virtual void setSyncPointName(char const * name); 00109 virtual char const * syncPointName() const; 00110 00112 #ifdef DtIFSPEC1516 00113 virtual void setTag(rti1516::VariableLengthData const* tag); 00114 virtual rti1516::VariableLengthData const* tag() const; 00115 #elif defined(DtIFSPEC1516E) 00116 virtual void setTag(rti1516e::VariableLengthData const* tag); 00117 virtual rti1516e::VariableLengthData const* tag() const; 00118 #else 00119 virtual void setTag(char const * tag); 00120 virtual char const * tag() const; 00121 #endif 00122 00124 virtual void setFederates(const DtFederateHandleSet* set); 00125 00129 virtual DtFederateHandleSet const * federates() const; 00130 00134 virtual void getFederates(DtFederateHandleSet* set) const; 00135 00137 virtual int numFederates() const; 00138 00142 virtual void getUnsuccessfulFederates(DtFederateHandleSet* set) const; 00143 00146 virtual void setUnsuccessfulFederates(const DtFederateHandleSet* set); 00147 00151 virtual DtFederateHandleSet const * unsuccessfulFederates() const; 00152 00154 virtual int numUnsuccessfulFederates() const; 00155 00157 virtual void printData(DtLogicalTimeFactory* logicalTimeFactory) const; 00158 00159 public: 00160 00162 static DtRtiMsg* create(const DtNetMsgHeader* initial, 00163 DtBufferPtr buffer = DtUSE_INTERNAL_BUFFER); 00164 00166 static DtRtiMsg* create(DtBufferPtr buffer = DtUSE_INTERNAL_BUFFER); 00167 00169 static void addCallback(DtConnectionMgr *conn, 00170 DtSyncPointCb cb, void *usr); 00171 static void removeCallback(DtConnectionMgr *conn, 00172 DtSyncPointCb cb, void *usr); 00173 00174 protected: 00175 00177 virtual DtNetSyncMsg* netSyncMsg(); 00178 virtual const DtNetSyncMsg* netSyncMsg() const; 00179 00181 virtual DtNetU32* handleArray(); 00182 virtual DtNetU32* unsuccessfulHandleArray(); 00183 virtual char* tagPtr(); 00184 virtual char* namePtr(); 00185 00187 virtual int handleArraySize() const; 00188 virtual int unsuccessfulHandleArraySize() const; 00189 virtual int tagFieldSize() const; 00190 virtual int nameFieldSize() const; 00191 00193 virtual DtRtiMsgKind internalDtRtiMsgKind(); 00194 00196 virtual int minSize() const; 00197 00199 DtSyncPointMsg* self() const; 00200 00201 protected: 00202 00203 #ifdef DtIFSPEC1516 00204 rti1516::VariableLengthData* myTag; 00205 #elif defined(DtIFSPEC1516E) 00206 rti1516e::VariableLengthData* myTag; 00207 #else 00208 char* myTag; 00209 #endif 00210 MAKRti::DtString myName; 00211 DtFederateHandleSet* mySet; 00212 DtFederateHandleSet* myUnsuccessfulSet; 00213 }; 00214 00215 inline DtSyncPointMsg* DtSyncPointMsg::self() const 00216 { 00217 return const_cast<DtSyncPointMsg*>( this ); 00218 } 00219 00220 #endif 00221 00222 00223 00224 00225 00226 00227 00228 00229 00230 00231