![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: signalMessageTransporter.h,v $ $Revision: 1.3 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef signalMessageTransporter_h 00015 #define signalMessageTransporter_h 00016 00017 #include "vrfMsgTransport/vrfMsgTransportDefines.h" 00018 #include <vlpi/disEnums.h> 00019 #include <vl/globalObjDes.h> 00020 #include "vrfmsgs/vrfObjectMessage.h" 00021 #include "vrfutil/callbackList.h" 00022 #include <vl/signalInter.h> 00023 #include <vrfmsgs/splitMsgHandle.h> 00024 #include <vrfutil/splitContentTimer.h> 00025 00026 class DtExerciseConn; 00027 class DtSplitMessageKey; 00028 class DtSignalMessageHeader; 00029 00032 const DtUserProtocol DtVrForcesSignalUserProtocol = (DtUserProtocol) 11050; 00033 00036 struct DtSignalMessageParams 00037 { 00038 DtString commModelName; 00039 DtGlobalObjectDesignator senderDesignator; 00040 int radioIndex; 00041 double sampleRate; 00042 }; 00043 00045 typedef std::pair<DtSignalMessageParams*, DtVrfObjectMessageConstPtr> DtSignalMessageTransporterCallbackParams; 00046 00050 class DT_DLL_vrfMsgTransport DtSignalMessageTransporter 00051 { 00052 public: 00053 00054 typedef struct _tSplitContentEntry{unsigned nSize; char* pBuffer;} SplitContentEntry; 00055 00056 typedef std::map<DtSplitMessageKey, std::map<unsigned, SplitContentEntry> > SplitContentMap; 00057 00058 private: 00060 00061 DtSignalMessageTransporter(); 00062 DtSignalMessageTransporter(const DtSignalMessageTransporter& orig); 00063 DtSignalMessageTransporter& operator=(const DtSignalMessageTransporter& orig); 00065 00066 protected: 00068 DtSignalMessageTransporter(DtExerciseConn* exConn); 00070 virtual bool init(); 00071 00072 public: 00075 static DtSignalMessageTransporter* create(DtExerciseConn* exConn); 00076 00077 virtual ~DtSignalMessageTransporter(); 00078 00080 virtual void clearSplitContent(); 00081 00084 bool enabled() const; 00085 virtual void setEnabled(bool bEnabled); 00088 virtual bool processSplitContent(const DtSignalMessageParams& params, 00089 const DtSignalMessageHeader& msgHdr, 00090 const char *pContent); 00091 00093 virtual void processSplitContentTimeout(const DtSplitMessageKey& key); 00094 00096 virtual bool processVrfObjectMessageReceived(const DtSignalMessageParams& params, 00097 const char *pVrfObjectMessageBuffer); 00098 00100 virtual bool reassembleVrfObjectMessage(const DtSignalMessageParams& params, 00101 const DtSignalMessageHeader& msgHdr); 00102 00104 virtual void removeSplitContent(const DtSplitMessageKey& key); 00105 00107 virtual void sendInteraction(const DtSignalMessageParams& params, 00108 const DtSignalMessageHeader& msgHdr, 00109 const char* pContent); 00110 00113 virtual void sendMessage(const DtSignalMessageParams& params, 00114 const DtVrfObjectMessage* message); 00115 00116 typedef DtCallbackList<DtSignalMessageTransporterCallbackParams*> DtMessageReceivedCallbackList; 00117 00123 00124 virtual void addMessageReceivedCallback(DtMessageReceivedCallbackList::DtCallbackFunctionType fcn, 00125 void* usr); 00126 virtual void removeMessageReceivedCallback(DtMessageReceivedCallbackList::DtCallbackFunctionType fcn, 00127 void* usr); 00129 00130 static void splitContentTimeoutCbk(const DtSplitMessageKey& key, void *pUsr); 00131 00132 protected: 00133 static void signalInteractionCallback(DtSignalInteraction* inter, void* usr); 00134 virtual void processSignalInteraction(DtSignalInteraction* inter); 00135 00137 virtual void sendSignalInteraction(DtSignalInteraction& signalInteraction); 00138 00139 protected: 00140 bool myEnabled; 00141 DtExerciseConn* myExConn; 00142 DtMessageReceivedCallbackList myMessageReceivedCallbacks; 00143 SplitContentMap mySplitContentMap; 00144 DtSplitContentTimer mySplitContentTimer; 00145 }; 00146 00147 inline bool DtSignalMessageTransporter::enabled() const 00148 { 00149 return myEnabled; 00150 } 00151 #endif