#if DtDIS
#include <vl/disPduFactory.h>
#include <vl/esPdu.h>
#endif
#if DtHLA
#include <vl/exerciseConn.h>
#include <vl/hExConnInit.h>
#include <vl/interaction.h>
#include <vlutil/vlRtiMismatchException.h>
#endif
#include <cmdLine/cmdLine.h>
using namespace MAKLogger;
#if DtDIS
{
DtPdu* aPdu = 0;
if(aPdu)
{
DtNetPacket* netPacket = reinterpret_cast<DtNetPacket*>(aPdu->packet());
int packetSize = netPacket->DtLength;
memcpy(packet->
data(),netPacket,packetSize);
messagesToWrite.
add(packet);
}
}
{
try
{
return DtLoggerFileWriter::create(ioInfo,file);
}
{
DtInfo << output << std::endl;
return 0;
}
}
#endif
#if DtHLA
DtLgrOnlineFomDesc* theFom;
#if DtHLA_1516
typedef std::map<RTI::ObjectInstanceHandle,DtLgrHlaHandle> ObjectInstanceMap;
#else
typedef std::map<RTI::ObjectHandle,DtLgrHlaHandle> ObjectInstanceMap;
#endif
ObjectInstanceMap theObjectInstanceMap;
DtLgrHlaHandle theFreeId = 0;
{
DtLgrHandleValueReferenceMap map;
#if DtHLA_1516
const DtBaseInterClassDesc* interDsc = 0;
interDsc = theFom->interDesc(interaction->interactionClassHandle());
if(!interDsc)
{
DtTHROW_NEW(DtInvalidFom,"Unknown interaction class handle.");
}
DtLgrValueMapFactory::convertRtiData(*theFom,*interDsc, interaction->phvm(),map);
DtLgrHlaHandle classHandle = interDsc->handle();
DtLgrValueReference tagRef((const char*)interaction->tag().data(),
interaction->tag().size());
#else
DtLgrValueMapFactory::convertRtiData(*theFom,interaction->phvps(),map);
DtLgrHlaHandle classHandle = interaction->interactionClassHandle();
DtLgrValueReference tagRef(interaction->tag().c_str(),interaction->tag().size());
#endif
size_t size = DtLgrHlaMessageFactory::calculateInteractionSize(map,tagRef);
DtLgrHlaMessageFactory::encodeInteraction(*packet,classHandle, map,tagRef);
return packet;
}
{
DtLgrHandleValueReferenceMap mapRef;
ObjectInstanceMap::iterator handleIter = theObjectInstanceMap.find(msg.objectId());
if(handleIter == theObjectInstanceMap.end())
{
theObjectInstanceMap[msg.objectId()] = ++theFreeId;
}
#if DtHLA_1516
DtLgrHlaHandle objectHandle = theObjectInstanceMap[msg.objectId()];
DtLgrValueReference tagRef((const char*)msg.tag().data(),msg.tag().size());
const DtBaseObjClassDesc* objDesc = theFom->objDesc(obj->classDesc().handle());
if(!objDesc)
{
"Unable to find class handle of object instance.");
return 0;
}
DtLgrValueMapFactory::convertRtiData(*theFom,*objDesc, msg.handleMap(),mapRef);
update = DtLgrHlaMessageFactory::encodeUpdate(time,objectHandle,
objDesc->handle(), mapRef,obj->name(),tagRef);
#else
DtLgrHlaHandle objectHandle = msg.objectId();
DtLgrValueReference tagRef(msg.tag().c_str(),msg.tag().size());
DtLgrValueMapFactory::convertRtiData(&msg.handleMap(),mapRef);
update = DtLgrHlaMessageFactory::encodeUpdate(time,objectHandle ,
obj->objectClassHandle(), mapRef,obj->name(),tagRef);
#endif
return update;
}
{
if(packet)
{
messagesToWrite.
add(packet);
}
}
{
try
{
DtLgrHlaRecordFile* file = DtLgrHlaRecordFile::create(filename, *theFom);
return DtLoggerFileWriter::create(ioInfo,file);
}
{
DtInfo << output << std::endl;
return 0;
}
}
#endif
{
getMessages(aBufferOfMessages);
aBufferOfMessages.
clear();
}
int writeFile(int argc,char** argv)
{
DtCmdLine::UnlabeledValueArg<DtString> filenameArg("Filename","The name of the logger file to write.","","string");
cmdLine.add(&filenameArg);
cmdLine.parse(argc,argv);
#if !DtHLA
#else
DtExerciseConnInitializer exConnInit;
#if DtHLA_1516_EVOLVED
exConnInit.setFedFileName("VR-Link_evolved.xml");
#elif DtHLA_1516
exConnInit.setFedFileName("VR-Link.xml");
#else
exConnInit.setFedFileName("VR-Link.fed");
#endif
try
{
}
catch( DtVlRtiMismatchException )
{
DtFatal << "Mismatching RTI compiler Version. Please reconfigure your environment" << std::endl;
return -1;
}
theFom = DtLgrOnlineFomDesc::create(theExerciseConn);
DtLgrHlaFileFormats::registerFormats();
#endif
DtString filename(filenameArg.getValue());
if(writer)
{
writer->activate(0);
writeData(writer);
writer->deactivate();
delete writer;
}
#if DtHLA
DtDELETE(theExerciseConn);
#endif
return 0;
}
int main(int argc,char** argv)
{
return writeFile(argc,argv);
}