Go to the documentation of this file.00001
00002
00003
00004
00005
00009
00010 #ifndef lgrDisSimManager_H_
00011 #define lgrDisSimManager_H_
00012
00013 #if DtDIS
00014
00015 #include "lgrSim.h"
00016 #include "lgrBaseSimManager.h"
00017 #include "virtualConstructor.h"
00018 #include "absoluteTime.h"
00019 #include "lgrConfigData.h"
00020
00021 #include <vl/pduCbMgr.h>
00022 #include <map>
00023 #include <set>
00024
00025 class DtPdu;
00026 class DtExerciseConn;
00027 class DtExerciseConnInitializer;
00028 class DtObjectPublisher;
00029 enum DtPduKind;
00030
00031 namespace MAKLogger
00032 {
00033
00034 class DtDisDescriptor;
00035 class DtLgrPublisherInterface;
00036 class DtLgrDisMessageState;
00037 class DtLgrDisSimInput;
00038 class DtLgrDisSimOutput;
00039 class DtLgrFileOutput;
00040 class DtLgrClock;
00041 class DtLgrDisEntityTypeManager;
00042
00045 class DT_DLL_LGRSIM DtLgrDisSimulationManager : public DtLgrBaseSimManager
00046 {
00047 public:
00048
00050 typedef DtLgrPublisherInterface* (*LgrPublisherCreator)\
00051 (DtLgrDisSimulationManager*,const DtPdu& pdu);
00052
00053 public:
00054
00055 DT_VIRTUAL_CTR(DtLgrDisSimulationManager,(DtLogger& logger))
00056
00057 virtual ~DtLgrDisSimulationManager();
00058
00060 virtual void tick();
00061
00063 virtual bool isConnected() const;
00064
00066 virtual bool connect(DtExerciseConnInitializer& initializer);
00067
00069 virtual void disconnect();
00070
00072 virtual const DtLgrSimInput* input() const;
00073 virtual DtLgrSimInput* input();
00074
00076 virtual const DtLgrSimOutput* output() const;
00077 virtual DtLgrSimOutput* output();
00078
00080 virtual const DtMessageState* state() const;
00081 virtual DtMessageState* state();
00082
00084 virtual DtMessageState* createState() const;
00085
00087 virtual DtLgrFileInput* openFileForInput(const DtString& filename) const;
00088
00090 virtual DtLgrFileOutput* openFileForCopying(const DtString& filename,
00091 const DtLgrFileInput* input) const;
00092
00094 virtual DtLgrFileOutput* openFileForOutput(const DtString& filename) const;
00095
00097 virtual DtLgrFileInput* openPartialFileForCopying(
00098 const DtLgrFileOutput* output , DtFilePosition firstPacket,
00099 DtFilePosition lastPacket) const;
00100
00101 virtual void addReceivePduCallback(DtPduCallbackFcn receivePduCb,void* usr);
00102 virtual void removeReceivePduCallback(DtPduCallbackFcn receivePduCb,void* usr);
00103
00105 virtual void sendPdu(DtPdu& pdu, unsigned char desiredExerciseId );
00106
00108 virtual void registerPublisher(DtPduKind,LgrPublisherCreator);
00109
00111 virtual void removePublisherCreator(DtPduKind);
00112
00114 virtual bool pduNeedsPublisher(DtPduKind pduKind) const;
00115
00117 virtual DtLgrPublisherInterface* createPublisher(const DtPdu& pdu);
00118
00120 virtual DtRelativeTime heartbeatRate() const;
00121
00123 virtual void setHeartbeatRate(DtRelativeTime time);
00124
00126 virtual DtRelativeTime timeoutRate() const;
00127
00129 virtual void setTimeoutRate(DtRelativeTime time);
00130
00132 virtual bool scaleArticulatedParts() const;
00133
00135 static DtVector scaleVector(const DtVector& vec,double scaleValue);
00136
00138 virtual void setDisDescription(DtDisDescriptor* desc);
00139
00141 virtual void setDrainInputMaxTime(double maxTime);
00142
00144 virtual double drainInputMaxTime() const;
00145
00147 virtual void setNumPdusToReadPerTimeCheck(int number);
00148
00150 virtual int numPdusToReadPerTimeCheck() const;
00151
00153 virtual const DtDisDescriptor* disDescription() const;
00154 virtual DtDisDescriptor* disDescription();
00155
00157 virtual void setEntityTypeManager(DtLgrDisEntityTypeManager* mgr);
00158
00160 virtual DtLgrDisEntityTypeManager* entityTypeManager();
00161 virtual const DtLgrDisEntityTypeManager* entityTypeManager() const;
00162
00163 virtual void setConfigurationFileName(const DtString& filename);
00164
00165 protected:
00166
00167 static DtLgrPublisherInterface* createEntityStatePublisher(
00168 DtLgrDisSimulationManager*, const DtPdu& pdu);
00169
00170 static DtLgrPublisherInterface* createAggregateStatePublisher(
00171 DtLgrDisSimulationManager*,const DtPdu& pdu);
00172
00173 static DtLgrPublisherInterface* createEnvironmentalProcessPublisher(
00174 DtLgrDisSimulationManager*,const DtPdu& pdu);
00175
00176 static DtLgrPublisherInterface* createTransmitterPublisher(
00177 DtLgrDisSimulationManager*,const DtPdu& pdu);
00178
00179 static DtLgrPublisherInterface* createReceiverPublisher(
00180 DtLgrDisSimulationManager*,const DtPdu& pdu);
00181
00182 static DtLgrPublisherInterface* createGriddedDataPublisher(
00183 DtLgrDisSimulationManager*,const DtPdu& pdu);
00184
00185 typedef std::map<DtPduKind,LgrPublisherCreator> DtPublisherFunctionMap;
00186
00187 typedef std::set<DtPduKind> DtPduKindSet;
00188
00189 DtPduKindSet myPublishedKinds;
00190 DtPublisherFunctionMap myPublisherMap;
00191 DtLgrDisMessageState* myMessageState;
00192 DtLgrDisSimInput* myInput;
00193 DtLgrDisSimOutput* myOutput;
00194 DtDisDescriptor* myDisDescriptor;
00195 DtLgrDisEntityTypeManager* myEntityTypeManager;
00196
00197 DtRelativeTime myHeartbeatRate;
00198 DtRelativeTime myTimeoutRate;
00199 bool myScaleArticulatedpartsFlag;
00200 double myDrainInputMaxTime;
00201 int myNumPdusToReadPerTimeCheck;
00202
00203 DtLgrConfigData myConfigData;
00204 };
00205
00206 }
00207
00208 #endif
00209 #endif