The recordFile program creates a logger, opens a logger tape, and plays it back.
Periodic messages output the current tape time. If 'q' is pressed playback stops and the program exits\ immediately, otherwise it will continue to the end of the tape at which point it will exit.
#include <vlutil/vlProcessControl.h>
#include <vlutil/vlPrint.h>
#include <vlutil/vlMiniDumper.h>
#if DtDIS
#include <vl/exerciseConnInitializerDIS.h>
#endif
#if DtHLA
#include <vl/exerciseConnInitializerHLA.h>
#endif
#include <cmdLine/cmdLine.h>
#include "vlutil/vlLogFileInfo.h"
#include "lgrUtil/svnRev.h"
using namespace MAKLogger;
#if DtHLA
const char defaultFileName[] = ".\\outputFileHLA.lgr";
#endif
#if DtDIS
const char defaultFileName[] = ".\\outputFileDIS.lgr";
#endif
const double totalTimeToRecord = 60.0;
{
simInterface = DtLgrSimInterface::create(logger);
assert(simInterface);
assert(recInterface);
}
{
bool canContinue = logger.
tick();
if(!canContinue) return;
assert(simInterface);
assert(recInterface);
recInterface->update();
}
bool keyCheck(const char* keysToCheck)
{
if(DtKbHit())
{
int c = DtGetCh();
return strchr(keysToCheck,c) != 0;
}
return false;
}
int recordFile(int argc, char** argv)
{
DtCmdLine::UnlabeledMultiArg<DtString> filenameArg("Filename","The name of the logger file to write.","string");
DtString description =
"Description text for the logger tape";
cmdLine.add(&filenameArg);
cmdLine.parse(argc,argv);
std::vector<DtString> values = filenameArg.getValue();
if(values.size() == 0)
{
values.push_back(defaultFileName);
}
DtExerciseConnInitializer exConnInit;
#if DtDIS
DtDisLogger* aLogger = DtDisLogger::create(true);
#endif
#if DtHLA
exConnInit.setFederateType("recordFile");
exConnInit.setFederateName("recordFile");
#endif
#if DtHLA
exConnInit.setFedFileName( DtDefaultRpr2Fom );
exConnInit.setExecName( "MAK-RPR-2.0" );
exConnInit.setRprFomVersion( 2.0 );
exConnInit.setRprFomRevision( 2 );
#ifdef DtHLA_1516_EVOLVED
std::vector<DtString> fomModules;
std::vector<DtString> fomModuleFromCommandLine;
exConnInit.fomModules(fomModuleFromCommandLine);
fomModules.push_back("MAK-VRFExt-6_evolved.xml");
fomModules.push_back("MAK-DIGuy-7_evolved.xml");
fomModules.push_back("MAK-LgrControl-2_evolved.xml");
fomModules.push_back("MAK-VRFAggregate-3_evolved.xml");
fomModules.push_back("MAK-DynamicTerrain-2_evolved.xml");
fomModules.insert(fomModules.end(), fomModuleFromCommandLine.begin(), fomModuleFromCommandLine.end());
exConnInit.setFomModules(fomModules);
#endif
#endif
createInterfaces(*aLogger);
tickAndUpdate(*aLogger);
{
DtInfo << "Unable to connect." << std::endl;
return 1;
}
recInterface->startNewFile(theFileName, description, true);
#if 0
recInterface->setRecordToMultipleFilesSettings( 10, "%FileDir%/%FileName%_%Index%.lgr" );
tickAndUpdate(*aLogger);
recInterface->recordToMultipleFiles( theFileName );
tickAndUpdate(*aLogger);
#endif
tickAndUpdate(*aLogger);
if(!recInterface->isFileLoaded())
{
DtInfo << "Unable to start new file." << std::endl;
return 1;
}
recInterface->record();
tickAndUpdate(*aLogger);
if(!recInterface->isRecording())
{
DtInfo << "Unable to start recording." << std::endl;
return 1;
}
double printDelay = 1.0;
double printLoopTotal = 0;
double loopDelay = .1;
DtInfo << "Recording file: " << theFileName << "." << std::endl;
DtInfo << "Press 'q' or 'enter' to quit." << std::endl;
while(recInterface->currentTime() < totalTimeToRecord)
{
tickAndUpdate(*aLogger);
if(printLoopTotal >= printDelay)
{
DtInfo << "Current Time = " << recInterface->currentTime() << "." << std::endl;
printLoopTotal = 0.0;
}
printLoopTotal += loopDelay;
DtSleep(loopDelay);
if(keyCheck("q\r")) break;
}
recInterface->stop(false);
tickAndUpdate(*aLogger);
recInterface->closeFile();
tickAndUpdate(*aLogger);
DtRestoreKbHit();
DtDELETE(aLogger);
return 0;
}
int main(int argc,char** argv)
{
DtLogFileInfo::instance().setAppName("RecordFile");
DtLogFileInfo::instance().setProtocol(DT_PROTOCOL_SHORT_NAME);
DtLogFileInfo::instance().setSvnRev(SVN_REV);
DtINIT_MINIDUMPER(DtLogFileInfo::instance().getFullString().c_str());
return recordFile(argc,argv);
}