VR-Forces 4.0.4 Class Documentation
include/vrfMsgTransport/externalCommsMessageTransporter.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2007 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: externalCommsMessageTransporter.h,v $ $Revision: 1.3 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00013 
00014 #ifndef externalCommsMessageTransporter_h
00015 #define externalCommsMessageTransporter_h
00016 
00017 #include "vrfutil/callbackList.h"
00018 #include <vlutil/vlMachineTypes.h>
00019 #include <vlpi/entityIdentifier.h>
00020 #include <vl/globalObjDes.h>
00021 #include <vl/dataInter.h>
00022 #include "vrfmsgs/vrfObjectMessage.h"
00023 #include "vrfMsgTransport/vrfMsgTransportDefines.h"
00024 #include <vl/signalInter.h>
00025 #include <vrfmsgs/splitMsgHandle.h>
00026 #include <vrfutil/splitContentTimer.h>
00027 
00028 class DtExerciseConn;
00029 class DtSplitMessageKey;
00030 class DtSignalMessageHeader;
00031 
00032 struct DtExternalCommsProcessMessageData
00033 {
00034    DtU32 myMessageId;
00035    DtEntityIdentifier mySender;
00036    DtEntityIdentifier myReceiver;
00037    DtU32 myTransmitterRadioIndex;
00038    double myDelay;
00039 };
00040 
00041 struct DtExternalCommsTimeoutData
00042 {
00043    DtU32 myMessageId;
00044    DtEntityIdentifier mySender;
00045    DtU32 myTransmitterRadioIndex;
00046 };
00047 
00048 struct DtExternalCommsReadyToSendData
00049 {
00050    DtEntityIdentifier myEntityId;
00051    DtU32 myRadioIndex;
00052 };
00053 
00054 struct DtExternalCommsMessageParams
00055 {
00056    DtU32 messageId;
00058    DtGlobalObjectDesignator transmitterDesignator; 
00059    DtU32 radioIndex;
00060    DtU32 messageSize;
00061    DtEntityIdentifier receiverID;
00062    float timeout;
00063    double sampleRate;
00064 };
00065 
00068 class DT_DLL_vrfMsgTransport DtExternalCommsMessageTransporter
00069 {
00070 public:
00071 
00072    typedef struct _tSplitContentEntry{unsigned nSize; char* pBuffer;} SplitContentEntry;
00073 
00074    typedef std::map<DtSplitMessageKey, std::map<unsigned, SplitContentEntry> > SplitContentMap;
00075 
00076 private:
00078 
00079    DtExternalCommsMessageTransporter();
00080    DtExternalCommsMessageTransporter(const DtExternalCommsMessageTransporter& orig);
00081    DtExternalCommsMessageTransporter& operator=(const DtExternalCommsMessageTransporter& orig);
00083 
00084 protected:
00086    DtExternalCommsMessageTransporter(DtExerciseConn* exConn);
00088    virtual bool init();
00089 
00090 public:
00093    static DtExternalCommsMessageTransporter* create(DtExerciseConn* exConn);
00094 
00095    virtual ~DtExternalCommsMessageTransporter();
00096 
00097 public:
00098    typedef DtCallbackList<const DtExternalCommsProcessMessageData&> DtProcessMessageCallbackList;
00099    typedef DtCallbackList<const DtExternalCommsTimeoutData&> DtTimeoutCallbackList;
00100    typedef std::pair<DtExternalCommsMessageParams, DtVrfObjectMessageConstPtr> DtExternalCommsMessageCallbackParams;
00101    typedef DtCallbackList<const DtExternalCommsMessageCallbackParams&> DtNewMessageCallbackList;
00102    typedef DtCallbackList<const DtExternalCommsReadyToSendData&> DtReadyToSendCallbackList;
00103 
00107 
00108    virtual void addProcessMessageCallback(DtProcessMessageCallbackList::DtCallbackFunctionType fcn,
00109       void* usr);
00110    virtual void removeProcessMessageCallback(DtProcessMessageCallbackList::DtCallbackFunctionType fcn,
00111       void* usr);
00113 
00117 
00118    virtual void addTimeoutCallback(DtTimeoutCallbackList::DtCallbackFunctionType fcn,
00119       void* usr);
00120    virtual void removeTimeoutCallback(DtTimeoutCallbackList::DtCallbackFunctionType fcn,
00121       void* usr);
00123 
00127 
00128    virtual void addReadyToSendCallback(DtReadyToSendCallbackList::DtCallbackFunctionType fcn,
00129       void* usr);
00130    virtual void removeReadyToSendCallback(DtReadyToSendCallbackList::DtCallbackFunctionType fcn,
00131       void* usr);
00133 
00135 
00136    virtual void addNewMessageCallback(DtNewMessageCallbackList::DtCallbackFunctionType fcn,
00137       void* usr);
00138    virtual void removeNewMessageCallback(DtNewMessageCallbackList::DtCallbackFunctionType fcn,
00139       void* usr);
00141 
00143    virtual void clearSplitContent();
00144 
00147    bool enabled() const;
00148    virtual void setEnabled(bool bEnabled);
00151    virtual bool processSplitContent(const DtExternalCommsMessageParams& params,
00152       const DtSignalMessageHeader& msgHdr,
00153       const char *pContent);
00154 
00156    virtual void processSplitContentTimeout(const DtSplitMessageKey& key);
00157 
00159    virtual bool processVrfObjectMessageReceived(const DtExternalCommsMessageParams& params,
00160       const char *pVrfObjectMessageBuffer);
00161 
00163    virtual bool reassembleVrfObjectMessage(const DtExternalCommsMessageParams& params,
00164       const DtSignalMessageHeader& msgHdr);
00165 
00167    virtual void removeSplitContent(const DtSplitMessageKey& key);
00168 
00170    virtual void sendInteraction(const DtExternalCommsMessageParams& params,
00171       const DtSignalMessageHeader& msgHdr,
00172       const char* pContent);
00173 
00176    virtual void sendMessage(const DtExternalCommsMessageParams& params, DtVrfObjectMessage* message);
00177 
00178    static void splitContentTimeoutCbk(const DtSplitMessageKey& key, void *pUsr);
00179 
00180 protected:
00181 
00182    virtual DtString entityIdToString(const DtEntityIdentifier& id) const;
00183 
00184    static void dataInteractionCallback(DtDataInteraction* interaction, void* usr);
00185 
00188    virtual void processDataInteraction(DtDataInteraction* interaction);
00189 
00190    virtual void processExternalCommsProcessMessage(DtDataInteraction* processMessageInteraction);
00191 
00192    virtual void processExternalCommsTimout(DtDataInteraction* timeoutInteraction);
00193 
00194    virtual void processExternalCommsReadyToSend(DtDataInteraction* readyToSendInteraction);
00195 
00196    static void signalInteractionCallback(DtSignalInteraction* inter, void* usr);
00197    virtual void processSignalInteraction(DtSignalInteraction* inter);
00198 
00200    virtual void sendSignalInteraction(DtSignalInteraction& signalInteraction);
00201 
00202 public:
00203 
00204 protected:
00205    bool myEnabled;
00206    DtExerciseConn* myExConn;
00207    DtProcessMessageCallbackList myProcessMessageCallbackList;
00208    DtTimeoutCallbackList myTimeoutCallbackList;
00209    DtNewMessageCallbackList myNewMessageCallbackList;
00210    DtReadyToSendCallbackList myReadyToSendCallbackList;
00211    SplitContentMap mySplitContentMap;
00212    DtSplitContentTimer mySplitContentTimer;
00213 };
00214 
00215 inline bool DtExternalCommsMessageTransporter::enabled() const
00216 {
00217    return myEnabled;
00218 }
00219 #endif

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)