10 #ifndef lgrDisSimManager_H_
11 #define lgrDisSimManager_H_
21 #include <vl/pduCallbackManager.h>
27 class DtExerciseConnInitializer;
34 class DtDisDescriptor;
35 class DtLgrPublisherInterface;
36 class DtLgrDisMessageState;
37 class DtLgrDisSimInput;
38 class DtLgrDisSimOutput;
39 class DtLgrFileOutput;
40 class DtLgrDisEntityTypeManager;
41 class DtLgrDisSimDriver;
45 class DT_DLL_LGRSIM DtLgrDisSimulationManager :
public DtLgrBaseSimManager
50 typedef DtLgrPublisherInterface* (*LgrPublisherCreator)\
51 (DtLgrDisSimulationManager&,
const DtPdu& pdu);
55 DT_VIRTUAL_CTR(DtLgrDisSimulationManager,(DtLogger& logger, DtLgrDisSimDriver& simDriver))
57 virtual ~DtLgrDisSimulationManager();
63 virtual bool isConnected()
const;
67 virtual bool connect(DtExerciseConnInitializer& initializer,
DtString& failureReason);
70 virtual void disconnect();
73 virtual DtLgrDisSimDriver& simDriver();
76 virtual const DtLgrDisSimDriver& simDriver()
const;
79 virtual const DtLgrSimInput* input()
const;
80 virtual DtLgrSimInput* input();
83 virtual const DtLgrSimOutput* output()
const;
84 virtual DtLgrSimOutput* output();
87 virtual const DtMessageState* state()
const;
88 virtual DtMessageState* state();
91 virtual DtMessageState* createState()
const;
94 virtual DtLgrFileInput* openFileForInput(
const DtString& filename)
const;
97 virtual DtLgrFileOutput* openFileForCopying(
const DtString& filename,
98 const DtLgrFileInput* input)
const;
101 virtual DtLgrFileOutput* openFileForOutput(
const DtString& filename,
105 virtual DtLgrFileInput* openPartialFileForCopying(
109 virtual void addReceivePduCallback(DtPduCallbackFcn receivePduCb,
void* usr);
110 virtual void removeReceivePduCallback(DtPduCallbackFcn receivePduCb,
void* usr);
113 virtual void sendPdu(
DtPdu& pdu);
116 virtual void registerPublisher(DtPduKind,LgrPublisherCreator);
119 virtual void removePublisherCreator(DtPduKind);
122 virtual bool pduNeedsPublisher(DtPduKind pduKind)
const;
125 virtual DtLgrPublisherInterface* createPublisher(
const DtPdu& pdu);
128 virtual DtRelativeTime heartbeatRate()
const;
131 virtual void setHeartbeatRate(DtRelativeTime time);
134 virtual DtRelativeTime timeoutRate()
const;
137 virtual void setTimeoutRate(DtRelativeTime time);
140 virtual bool scaleArticulatedParts()
const;
143 static DtVector scaleVector(
const DtVector& vec,
double scaleValue);
146 virtual void setDisDescription(DtDisDescriptor* desc);
149 virtual void setDrainInputMaxTime(
double maxTime);
152 virtual double drainInputMaxTime()
const;
155 virtual void setNumPdusToReadPerTimeCheck(
int number);
158 virtual int numPdusToReadPerTimeCheck()
const;
161 virtual const DtDisDescriptor* disDescription()
const;
162 virtual DtDisDescriptor* disDescription();
165 virtual void setEntityTypeManager(DtLgrDisEntityTypeManager* mgr);
168 virtual DtLgrDisEntityTypeManager* entityTypeManager();
169 virtual const DtLgrDisEntityTypeManager* entityTypeManager()
const;
171 virtual void setConfigurationFileName(
const DtString& filename);
175 static DtLgrPublisherInterface* createEntityStatePublisher(
176 DtLgrDisSimulationManager&,
const DtPdu& pdu);
178 static DtLgrPublisherInterface* createAggregateStatePublisher(
179 DtLgrDisSimulationManager&,
const DtPdu& pdu);
181 static DtLgrPublisherInterface* createEnvironmentalProcessPublisher(
182 DtLgrDisSimulationManager&,
const DtPdu& pdu);
184 static DtLgrPublisherInterface* createTransmitterPublisher(
185 DtLgrDisSimulationManager&,
const DtPdu& pdu);
187 static DtLgrPublisherInterface* createReceiverPublisher(
188 DtLgrDisSimulationManager&,
const DtPdu& pdu);
190 static DtLgrPublisherInterface* createGriddedDataPublisher(
191 DtLgrDisSimulationManager&,
const DtPdu& pdu);
193 typedef std::map<DtPduKind,LgrPublisherCreator> DtPublisherFunctionMap;
195 typedef std::set<DtPduKind> DtPduKindSet;
197 DtPduKindSet myPublishedKinds;
198 DtPduKindSet myMessageStateKinds;
199 DtPublisherFunctionMap myPublisherMap;
200 DtLgrDisMessageState* myMessageState;
201 DtLgrDisSimInput* myInput;
202 DtLgrDisSimOutput* myOutput;
203 DtDisDescriptor* myDisDescriptor;
204 DtLgrDisEntityTypeManager* myEntityTypeManager;
205 DtLgrDisSimDriver& mySimDriver;
207 DtRelativeTime myHeartbeatRate;
208 DtRelativeTime myTimeoutRate;
209 bool myScaleArticulatedpartsFlag;
210 double myDrainInputMaxTime;
211 int myNumPdusToReadPerTimeCheck;
213 DtLgrConfigData myConfigData;