![]() |
VR-Forces 4.0.4 Class Documentation
|
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