![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: externalCommModel.h,v $ $Revision: 1.5 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef externalCommModel_h 00015 #define externalCommModel_h 00016 00017 #include <vl/globalObjDes.h> 00018 #include <map> 00019 #include <deque> 00020 #include "vrfobjcore/commModel.h" 00021 #include "vrfMsgTransport/externalCommsMessageTransporter.h" 00022 #include "vrfobjcore/vrfobjcoreDefines.h" 00023 00024 class DtExternalCommModelDescriptor; 00025 00026 class DT_DLL_vrfobjcore DtExternalCommModel : public DtCommModel 00027 { 00028 private: 00030 00031 DtExternalCommModel(); 00032 DtExternalCommModel(const DtExternalCommModel& orig); 00033 DtExternalCommModel& operator=(const DtExternalCommModel& orig); 00035 00036 protected: 00038 DtExternalCommModel(DtCommModelCreationParams& params); 00040 virtual bool init(); 00041 00042 public: 00045 static DtCommModel* create(DtCommModelCreationParams& params); 00046 00047 virtual ~DtExternalCommModel(); 00048 00050 virtual DtString type() const; 00051 00054 virtual void registerRadio(DtVrfRadio* radio); 00055 00060 virtual void sendMessage(DtVrfObjectMessage* message, DtVrfRadio* sendingRadio); 00061 00064 virtual void tick(); 00065 00066 protected: 00067 virtual DtU32 nextMessageId(const DtEntityIdentifier& entityId); 00068 00070 virtual void passMessageToReceiver(DtVrfObjectMessageConstPtr, const DtEntityIdentifier& receiver); 00071 00072 static void messageClearToReceiveCallback(const DtExternalCommsProcessMessageData& data, void* usr); 00073 virtual void processMessageClearToReceive(const DtExternalCommsProcessMessageData& data); 00074 00075 static void messageTimeoutCallback(const DtExternalCommsTimeoutData& data, void* usr); 00076 virtual void processMessageTimeout(const DtExternalCommsTimeoutData& data); 00077 00078 static void newMessageCallback(const DtExternalCommsMessageTransporter::DtExternalCommsMessageCallbackParams& params, void* usr); 00079 virtual void processNewMessage(const DtExternalCommsMessageTransporter::DtExternalCommsMessageCallbackParams& params); 00080 00081 static void readyToSendCallback(const DtExternalCommsReadyToSendData& data, void* usr); 00082 virtual void processReadyToSend(const DtExternalCommsReadyToSendData& data); 00083 00084 protected: 00085 00086 00087 struct DtClearToReceiveData 00088 { 00089 DtVrfObjectMessageConstPtr myRadioMessage; 00090 DtEntityIdentifier myReceiver; 00091 }; 00092 00093 DtU32 myLastMessageId; 00094 00095 typedef std::map<DtU32, DtVrfObjectMessageConstPtr> DtRadioMessageMap; 00098 DtRadioMessageMap mySentMessages; 00099 DtExternalCommsMessageTransporter* myTransporter; 00100 00103 typedef std::deque<DtClearToReceiveData> DtClearToReceiveDeque; 00104 DtClearToReceiveDeque myClearToReceiveDeque; 00105 00106 const DtExternalCommModelDescriptor* myExternalCommModelDescriptor; 00107 00110 typedef std::map<DtU32, DtExternalCommsProcessMessageData> DtExternalCommsMessageDataMap; 00111 DtExternalCommsMessageDataMap myWaitingForMessageMap; 00112 00115 typedef std::map<DtU32, DtExternalCommsTimeoutData> DtExternalCommsTimeoutMap; 00116 DtExternalCommsTimeoutMap myTimedOutMessageMap; 00117 }; 00118 00119 #endif