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;
41 class DtLgrDisEntityTypeManager;
45 class DT_DLL_LGRSIM DtLgrDisSimulationManager :
public DtLgrBaseSimManager
50 typedef DtLgrPublisherInterface* (*LgrPublisherCreator)\
51 (DtLgrDisSimulationManager*,
const DtPdu& pdu);
57 virtual ~DtLgrDisSimulationManager();
63 virtual bool isConnected()
const;
66 virtual bool connect(DtExerciseConnInitializer& initializer);
69 virtual void disconnect();
72 virtual const DtLgrSimInput* input()
const;
73 virtual DtLgrSimInput* input();
76 virtual const DtLgrSimOutput* output()
const;
77 virtual DtLgrSimOutput* output();
80 virtual const DtMessageState* state()
const;
81 virtual DtMessageState* state();
84 virtual DtMessageState* createState()
const;
87 virtual DtLgrFileInput* openFileForInput(
const DtString& filename)
const;
90 virtual DtLgrFileOutput* openFileForCopying(
const DtString& filename,
91 const DtLgrFileInput* input)
const;
94 virtual DtLgrFileOutput* openFileForOutput(
const DtString& filename,
98 virtual DtLgrFileInput* openPartialFileForCopying(
102 virtual void addReceivePduCallback(DtPduCallbackFcn receivePduCb,
void* usr);
103 virtual void removeReceivePduCallback(DtPduCallbackFcn receivePduCb,
void* usr);
106 virtual void sendPdu(
DtPdu& pdu,
unsigned char desiredExerciseId );
109 virtual void registerPublisher(DtPduKind,LgrPublisherCreator);
112 virtual void removePublisherCreator(DtPduKind);
115 virtual bool pduNeedsPublisher(DtPduKind pduKind)
const;
118 virtual DtLgrPublisherInterface* createPublisher(
const DtPdu& pdu);
121 virtual DtRelativeTime heartbeatRate()
const;
124 virtual void setHeartbeatRate(DtRelativeTime time);
127 virtual DtRelativeTime timeoutRate()
const;
130 virtual void setTimeoutRate(DtRelativeTime time);
133 virtual bool scaleArticulatedParts()
const;
136 static DtVector scaleVector(
const DtVector& vec,
double scaleValue);
139 virtual void setDisDescription(DtDisDescriptor* desc);
142 virtual void setDrainInputMaxTime(
double maxTime);
145 virtual double drainInputMaxTime()
const;
148 virtual void setNumPdusToReadPerTimeCheck(
int number);
151 virtual int numPdusToReadPerTimeCheck()
const;
154 virtual const DtDisDescriptor* disDescription()
const;
155 virtual DtDisDescriptor* disDescription();
158 virtual void setEntityTypeManager(DtLgrDisEntityTypeManager* mgr);
161 virtual DtLgrDisEntityTypeManager* entityTypeManager();
162 virtual const DtLgrDisEntityTypeManager* entityTypeManager()
const;
164 virtual void setConfigurationFileName(
const DtString& filename);
168 static DtLgrPublisherInterface* createEntityStatePublisher(
169 DtLgrDisSimulationManager*,
const DtPdu& pdu);
171 static DtLgrPublisherInterface* createAggregateStatePublisher(
172 DtLgrDisSimulationManager*,
const DtPdu& pdu);
174 static DtLgrPublisherInterface* createEnvironmentalProcessPublisher(
175 DtLgrDisSimulationManager*,
const DtPdu& pdu);
177 static DtLgrPublisherInterface* createTransmitterPublisher(
178 DtLgrDisSimulationManager*,
const DtPdu& pdu);
180 static DtLgrPublisherInterface* createReceiverPublisher(
181 DtLgrDisSimulationManager*,
const DtPdu& pdu);
183 static DtLgrPublisherInterface* createGriddedDataPublisher(
184 DtLgrDisSimulationManager*,
const DtPdu& pdu);
186 typedef std::map<DtPduKind,LgrPublisherCreator> DtPublisherFunctionMap;
188 typedef std::set<DtPduKind> DtPduKindSet;
190 DtPduKindSet myPublishedKinds;
191 DtPublisherFunctionMap myPublisherMap;
192 DtLgrDisMessageState* myMessageState;
193 DtLgrDisSimInput* myInput;
194 DtLgrDisSimOutput* myOutput;
195 DtDisDescriptor* myDisDescriptor;
196 DtLgrDisEntityTypeManager* myEntityTypeManager;
198 DtRelativeTime myHeartbeatRate;
199 DtRelativeTime myTimeoutRate;
200 bool myScaleArticulatedpartsFlag;
201 double myDrainInputMaxTime;
202 int myNumPdusToReadPerTimeCheck;
204 DtLgrConfigData myConfigData;