VR-Exchange 2.4 API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DIS Broker Example

A Modified DIS Broker that changes the Set Data interaction


/****************************************************************************
* Copyright (c) 2015 VT MAK
* All rights reserved.
****************************************************************************/
#include <vlutil/vlExceptions.h>
#include <vlutil/vlMiniDumper.h>
#include <setDataInTrans.h>
#include <iostream>
int main( int argc, char* argv[] )
{
DtINIT_MINIDUMPER( "Modified DIS Broker" );
try
{
using namespace MAKVrExchange;
using namespace MAKVrExchange::DtDisBroker;
DtInfo << "Starting Modified DIS Broker Example" << std::endl;
// Load the configuration options
disInit->parseCmdLine(); //Automatically loads the file specified by the CmdLine
// Specify that we are creating a DIS Broker, and a GUI for the broker.
DtBrokerApp::setBrokerDialogCreator( DtDisBrokerDialog::create );
DtBrokerApp* brokerApp = new DtBrokerApp( disInit );
if ( ! ((DtVrlBroker*)brokerApp->broker())->connection()
&& ! disInit->showConnectionInfoDialog() )
{
// Install the modified translator by creating a default factory. This needs
// to be done before the call to DtBrokerApp::run() where all the translator
// instances are created. The translator name is used by the factory, so
// if you want to replace a translator it needs to have the same name.
brokerApp->broker()->interactionTranslatorFactory()->addCreator<ModSetDataInteractionTranslator>();
brokerApp->run();
}
else
{
brokerApp->showInfoDialog();
}
DtDELETE( brokerApp );
}
DtCATCH_AND_WARN( std::cout )
return 0;
}

/****************************************************************************
* Copyright (c) 2015 VT MAK
* All rights reserved.
****************************************************************************/
#include "setDataInTrans.h"
#include <vl/exerciseConn.h>
#include <vl/setDataInteraction.h>
using namespace MAKVrExchange;
DtBroker* broker )
: ParentClass( broker, translatorName(),
{
// Users can print anywhere they want, but DtInfo is the default stream used
// by VR-Exchange for information messages. It is routed to a log file as specified
// by the DIS Broker configuration files.
DtInfo << "In Constructor for Modified SetDataInteraction Translator!" << std::endl;
}
{
}
{
DtSetDataInteraction::addCallback(
disBroker()->connection(), receiveDisInteraction, this );
}
{
DtPortalSetDataInteraction::addCallback(
}
{
DtSetDataInteraction::removeCallback(
disBroker()->connection(), receiveDisInteraction, this );
}
{
DtPortalSetDataInteraction::removeCallback(
}
const DtPortalSetDataInteraction& incoming )
{
DtSetDataInteraction outgoing;
translate( &outgoing, incoming );
{
printIncomingOutgoingInteractions( incoming, outgoing );
}
disBroker()->connection()->sendStamped( outgoing );
}
const DtSetDataInteraction& incoming )
{
translate( &outgoing, incoming );
{
printIncomingOutgoingInteractions( incoming, outgoing );
}
myBroker->portalConnection()->send( outgoing );
}
DtSetDataInteraction *interaction, void *userSetData )
{
static_cast< ModSetDataInteractionTranslator* >( userSetData );
translator->createPortalInteraction( *interaction );
}
const DtPortalSetDataInteraction &interaction, void *userSetData )
{
static_cast< ModSetDataInteractionTranslator* >( userSetData );
translator->createInteraction( interaction );
}
//---------------------------------------------------------------------
// This is DIS -> PORTAL
//---------------------------------------------------------------------
const DtSetDataInteraction& source )
{
destination->setOriginatingEntity( disBroker()->convertGlobalId( source.senderId() ));
destination->setReceivingEntity( disBroker()->convertGlobalId( source.receiverId() ));
destination->setRequestIdentifier( source.requestId() );
// Fixed Datums
{
DtFixedLengthDataArray* fixedDatums = &destination->fixedDatums();
fixedDatums->resize( source.numFixedFields() );
DtFixedLengthDataArray::iterator pos = fixedDatums->begin();
// Indexes for Var Datums start at 1 in VR-Link
for ( int index = 1; pos != fixedDatums->end(); ++pos, ++index )
{
(*pos).setId( source.fixedDatumId( index ));
DtDatumRetCode returnCode = DtDatumBadLength;
DtU32 fixedValue = source.datumValUnsigned32( DtFixed, index, &returnCode );
if (returnCode == DtDatumValid)
{
(*pos).setValue( fixedValue );
}
}
}
// Variable Datum Set
{
DtAttributeValuePairList* variableDatumSet = &destination->variableDatumSet();
variableDatumSet->resize( source.numVarFields() );
DtAttributeValuePairList::iterator pos = variableDatumSet->begin();
// Indexes for Var Datums start at 1 in VR-Link
for ( int index = 1; pos != variableDatumSet->end(); ++pos, ++index )
{
(*pos).first = DtString( source.varDatumId( index ));
(*pos).second.setData( source.datumValByteArray( DtVar, index ),
source.datumSizeBytes( DtVar, index ));
}
}
return destination;
}
//---------------------------------------------------------------------
// This is Portal -> DIS
//---------------------------------------------------------------------
DtSetDataInteraction* destination,
{
destination->setSenderId( disBroker()->convertGlobalId( source.originatingEntity() ));
destination->setReceiverId( disBroker()->convertGlobalId( source.receivingEntity() ));
destination->setRequestId( source.requestIdentifier() );
// Fixed Datum Set
{
destination->setNumFixedFields( (int)source.fixedDatums().size() );
DtFixedLengthDataArray::const_iterator pos = source.fixedDatums().begin();
// Indexes for Var Datums start at 1 in VR-Link
for (int index = 1; pos != source.fixedDatums().end(); ++pos, ++index)
{
DtDatumRetCode returnCode = DtDatumBadLength;
DtDatumParam id = (DtDatumParam)(*pos).id();
destination->setDatumParam( DtFixed, index, id, &returnCode );
if (returnCode == DtDatumValid)
{
DtU32 value = (*pos).value();
destination->setDatumValUnsigned32( DtFixed, index, value, &returnCode );
}
}
}
// Variable Datum true
{
destination->setNumVarFields( (int)source.variableDatumSet().size() );
DtAttributeValuePairList::const_iterator pos = source.variableDatumSet().begin();
// Indexes for Var Datums start at 1 in VR-Link
for (int index = 1; pos != source.variableDatumSet().end(); ++pos, ++index)
{
DtDatumRetCode returnCode = DtDatumBadLength;
DtDatumParam varDatumId = (DtDatumParam)atol( (*pos).first );
destination->setDatumParam( DtVar, index, varDatumId, &returnCode );
if (returnCode == DtDatumValid)
{
int length = (*pos).second.size();
destination->setVarDataBytes( index, length, &returnCode );
const char* value = (*pos).second.data();
destination->setDatumValByteArray( DtVar, index, value, &returnCode );
}
}
}
return destination;
}

Document ID: Generated on Thu Jul 23 10:25:22 EDT 2015 from SVN revision 155065
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)