VR-Forces 4.0.4 Class Documentation
include/vrfMsgTransport/vrfMsgIf.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)