![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999-2001 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: vrfMsgIf.h,v $ $Revision: 1.3 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00017 00018 #ifndef DtVrfMessageInterface_H_ 00019 #define DtVrfMessageInterface_H_ 00020 00021 #include <vlutil/vlMachineTypes.h> 00022 #include <vlpi/disEnums.h> 00023 00024 #include "vrfmsgs/msgExec.h" 00025 #include <vrfExtProtocol/msgTypes.h> 00026 #include <vlutil/vlUtil.h> 00027 #include <vl/dataInter.h> 00028 00029 class DtSimInterfaceMessage; 00030 class DtInterfaceMessageExecutive; 00031 class DtSimInterfaceContent; 00032 class DtInterfaceContentFactory; 00033 class DtExerciseConn; 00034 class DtSplitMessageHandle; 00035 class DtSplitMessageCollector; 00036 00037 #include "vrfMsgTransport/vrfMsgTransportDefines.h" 00038 00043 typedef bool (*DtIsValidVrfMessageVersionFcn)(DtU32 version, DtDataInteraction* inter, void* user); 00044 00045 class DT_DLL_vrfMsgTransport DtVrfMessageInterface 00046 { 00047 public: 00048 00050 DtVrfMessageInterface(DtExerciseConn* exConn, 00051 bool useDefaultInterfaceFactory = true); 00052 00054 virtual ~DtVrfMessageInterface(); 00055 00057 virtual bool init(); 00058 00061 virtual bool createMessageExecutive(); 00062 00064 virtual void createSplitMessageCollector(); 00065 00066 virtual DtSplitMessageCollector* splitMessageCollector(); 00067 virtual const DtSplitMessageCollector* splitMessageCollector() const; 00068 00070 virtual bool deliverMessage(const DtSimInterfaceMessage& msg); 00071 virtual bool receiveMessage(const DtSimInterfaceMessage& msg); 00072 00073 virtual bool createAndDeliverMessage( 00074 const DtSimulationAddress& recipient, 00075 const DtSimInterfaceContent & content, 00076 bool overrideTimestampOrder = true); 00077 00078 #if XXX 00079 00080 virtual bool createAndDeliverMessage(const DtSimulationAddress& sender, 00081 const DtSimulationAddress& recipient, 00082 const DtSimInterfaceContent & content); 00083 #endif 00084 00086 virtual bool getContentFromNet(DtDataInteraction* dataInter, 00087 DtSimInterfaceContent*& content) const; 00088 00089 virtual bool getContentFromNet(unsigned nBufferSize, 00090 int nContentType, 00091 const char* pContentBuffer, 00092 DtSimInterfaceContent*& content) const; 00093 00094 virtual bool setContentForNet(DtDataInteraction* dataInter, 00095 DtSimInterfaceContent* content) const; 00096 00098 virtual void setSequence(DtU32 num); 00099 virtual DtU32 sequence() const; 00100 00102 virtual void setSessionId(DtU32 num); 00103 virtual DtU32 sessionId() const; 00104 00106 virtual void setVrfMessageVersionSupported(DtU32 num); 00107 virtual DtU32 vrfMessageVersionSupported() const; 00108 00122 virtual bool isMessageVrfVersionSupported(DtDataInteraction*) const; 00123 00125 virtual void addVrfMessageVersionValidCallback(DtIsValidVrfMessageVersionFcn fcn, void* usr); 00126 virtual void removeVrfMessageVersionValidCallback(DtIsValidVrfMessageVersionFcn fcn, void* usr); 00127 00130 virtual bool isVrfMessageVersionTransparentMessageType(int messageType) const; 00131 00134 virtual bool isSessionTransparentMessageType(int messageType); 00135 00137 virtual DtExerciseConn* exerciseConn(); 00138 00140 virtual void clearExerciseConn(); 00141 00143 virtual DtInterfaceContentFactory* factory() const; 00144 virtual void setFactory(DtInterfaceContentFactory* fact); 00145 00147 virtual DtInterfaceMessageExecutive* messageExecutive() const; 00148 00151 virtual const DtSimulationAddress& messageAddress() const; 00152 00154 virtual void receiveMessage(DtDataInteraction* dataInter); 00155 00157 virtual bool sendMessage(const DtSimInterfaceMessage& message); 00158 00160 virtual void addMessageCallback(int type, DtMessageCallbackFcn fcn, 00161 void* usrData); 00162 00163 virtual void removeMessageCallback(int type, DtMessageCallbackFcn fcn, 00164 void* usrData); 00165 00177 virtual bool sendSplitContent(const char* pContentBuffer, 00178 unsigned int nBufferSize, 00179 int nContentType, 00180 const DtSimulationAddress& sender, 00181 const DtSimulationAddress& recipient, 00182 DtSplitMessageHandle& msgHandleReturn); 00183 00186 virtual bool sendSplitContent(const char* pContentBuffer, 00187 unsigned int nBufferSize, 00188 int nContentType, 00189 const DtSimulationAddress& sender, 00190 const DtSimulationAddress& recipient); 00191 00192 #ifdef DtHLA 00193 00194 virtual bool isQueuedMessage(const DtSimInterfaceMessage& message); 00195 00202 virtual void processReceiveMessageQueue(); 00203 00205 virtual void setQueueMessages(bool); 00206 virtual bool queueMessages() const; 00207 00208 #endif 00209 00211 virtual void processReassembledContent(const char* pContent, 00212 int nContentSize, 00213 int nContentType, 00214 const DtSimulationAddress& messageIdSender, 00215 int messageIdNumber, 00216 const DtSimulationAddress& recipient); 00217 00218 public: 00219 static void netMessageCallback(DtDataInteraction* dataInter, 00220 void * usr); 00221 00224 virtual bool receiveMessage(const DtSimInterfaceContent& content); 00225 00226 protected: 00227 00229 bool sendNormalMessage(const DtSimInterfaceMessage& message); 00230 00239 static bool matchPattern(const DtSimulationAddress& address, 00240 const DtSimulationAddress& pattern); 00241 00242 #ifdef DtHLA 00243 00244 static void postDrainCallback(void* usr); 00245 #endif 00246 00247 protected: 00248 00249 DtVrfMessageInterface(const DtVrfMessageInterface& orig); 00250 00251 DtVrfMessageInterface& operator=( 00252 const DtVrfMessageInterface& orig); 00253 00254 DtVrfMessageInterface(); 00255 00256 protected: 00257 00258 DtInterfaceContentFactory* myContentFactory; 00259 DtInterfaceMessageExecutive* myMessageExecutive; 00260 DtExerciseConn* myExerciseConnection; 00261 00262 bool myCreatedInterfaceFactory; 00263 DtU32 mySequenceNumber; 00264 DtU32 mySessionId; 00265 00266 DtSplitMessageCollector* mySplitMessageCollector; 00267 00271 DtU32 myVrfMessageVersionSupported; 00272 DtList myCallbacks; 00273 00274 #ifdef DtHLA 00275 00276 00277 00278 DtList myReceiveMessageQueue; 00279 00281 bool myQueueMessages; 00282 #endif 00283 }; 00284 00285 inline DtU32 DtVrfMessageInterface::sequence() const 00286 { 00287 return mySequenceNumber; 00288 } 00289 00290 inline void DtVrfMessageInterface::setSessionId(DtU32 num) 00291 { 00292 DtInfo("Setting SessionId to %d\n", num); 00293 mySessionId = num; 00294 } 00295 00296 inline DtU32 DtVrfMessageInterface::sessionId() const 00297 { 00298 return mySessionId; 00299 } 00300 00301 inline bool DtVrfMessageInterface::isSessionTransparentMessageType( 00302 int messageType) 00303 { 00304 if (messageType == DtVrfObjectDataMessageType) 00305 { 00306 return true; 00307 } 00308 00309 return false; 00310 } 00311 00312 inline bool DtVrfMessageInterface::isVrfMessageVersionTransparentMessageType( 00313 int messageType) const 00314 { 00315 if (messageType == DtVrfObjectDataMessageType) 00316 { 00317 return true; 00318 } 00319 00320 return false; 00321 } 00322 00323 inline void DtVrfMessageInterface::clearExerciseConn() 00324 { 00325 myExerciseConnection = 0; 00326 } 00327 00328 inline DtExerciseConn* DtVrfMessageInterface::exerciseConn() 00329 { 00330 return myExerciseConnection; 00331 } 00332 00333 inline DtSplitMessageCollector* DtVrfMessageInterface::splitMessageCollector() 00334 { 00335 return (mySplitMessageCollector); 00336 } 00337 00338 inline const DtSplitMessageCollector* DtVrfMessageInterface::splitMessageCollector() const 00339 { 00340 return (mySplitMessageCollector); 00341 } 00342 00343 inline void DtVrfMessageInterface::setVrfMessageVersionSupported(DtU32 num) 00344 { 00345 myVrfMessageVersionSupported = num; 00346 } 00347 00348 inline DtU32 DtVrfMessageInterface::vrfMessageVersionSupported() const 00349 { 00350 return myVrfMessageVersionSupported; 00351 } 00352 00353 #endif 00354 00355