#ifndef TestInteraction_H_
#define TestInteraction_H_
#if DtHLA
class TestSimpleInteraction;
typedef void (*TestSimpleInteractionCb)(TestSimpleInteraction* inter, void* usr);
{
public:
TestSimpleInteraction();
virtual ~TestSimpleInteraction();
TestSimpleInteraction(const TestSimpleInteraction& orig);
TestSimpleInteraction&
operator=(
const TestSimpleInteraction& orig);
#if DtHLA_1516
virtual const RTI::ParameterHandleValueMap& phvm() const;
#else
virtual const RTI::ParameterHandleValuePairSet& phvps() const;
#endif
#if DtHLA_1516
virtual void setFromPhvm(const RTI::ParameterHandleValueMap& pvMap);
#else
virtual void setFromPhvps(const RTI::ParameterHandleValuePairSet& pvSet);
#endif
virtual const char* name() const;
virtual void setNumber(int num);
virtual int number() const;
virtual void setVector(
const DtVector& vec);
public:
TestSimpleInteractionCb cb, void* usr);
TestSimpleInteractionCb cb, void* usr);
protected:
virtual const char* interactionClassToUse(
DtExerciseConn* exConn)
const;
protected:
int myNum;
};
#endif
#endif
#if DtHLA
TestSimpleInteraction::TestSimpleInteraction() :
myNum(0),
myVec()
{
}
TestSimpleInteraction::~TestSimpleInteraction()
{
}
TestSimpleInteraction::TestSimpleInteraction(const TestSimpleInteraction& orig) :
{
myNum = orig.number();
myVec = orig.vector();
}
TestSimpleInteraction& TestSimpleInteraction::operator=(const TestSimpleInteraction& orig)
{
if (this == &orig)
{
return *this;
}
myNum = orig.number();
myVec = orig.vector();
return *this;
}
const char* TestSimpleInteraction::name() const
{
return "TestSimpleInteraction";
}
void TestSimpleInteraction::printData() const
{
DtInfo <<
"Number: " << number() <<
'\n';
DtInfo <<
"Vector: " << vector().string() << std::endl;
}
#if DtHLA_1516
const RTI::ParameterHandleValueMap& TestSimpleInteraction::phvm() const
#else
const RTI::ParameterHandleValuePairSet& TestSimpleInteraction::phvps() const
#endif
{
#if DtHLA_1516
static RTI::ParameterHandleValueMap thePvMap;
thePvMap.clear();
if (!exerciseConn())
{
DtInfo <<
"Illegal call to TestSimpleInteraction::phvps.\n"
<< "Must call setExConn first." << std::endl;
return thePvMap;
}
RTI::ParameterHandle numberHandle =
exerciseConn()->rtiAmb()->getParameterHandle(
interactionClassHandle(), L"Number");
RTI::ParameterHandle vectorHandle =
exerciseConn()->rtiAmb()->getParameterHandle(
interactionClassHandle(), L"Vector");
thePvMap[numberHandle].setData((char *) &netNum, sizeof(netNum));
thePvMap[vectorHandle].setData((char *) &netVec, sizeof(netVec));
return thePvMap;
#else
static RTI::ParameterHandleValuePairSet* thePvSet = NULL;
if (!thePvSet)
{
thePvSet = RTI::ParameterSetFactory::create(numParameters());
}
thePvSet->empty();
if (!exerciseConn())
{
DtInfo <<
"Illegal call to TestSimpleInteraction::phvps.\n"
<< "Must call setExConn first." << std::endl;
return *thePvSet;
}
RTI::ParameterHandle numberHandle =
exerciseConn()->rtiAmb()->getParameterHandle("Number",
interactionClassHandle());
RTI::ParameterHandle vectorHandle =
exerciseConn()->rtiAmb()->getParameterHandle("Vector",
interactionClassHandle());
thePvSet->add(numberHandle, (char*) &netNum, sizeof(netNum));
thePvSet->add(vectorHandle, (char*) &netVec, sizeof(netVec));
return *thePvSet;
#endif
}
#if DtHLA_1516
void TestSimpleInteraction::setFromPhvm(
const RTI::ParameterHandleValueMap& pvMap)
#else
void TestSimpleInteraction::setFromPhvps(
const RTI::ParameterHandleValuePairSet& pvSet)
#endif
{
if (!exerciseConn())
{
DtInfo <<
"Illegal call to TestSimpleInteraction::setFromPhvps.\n"
<< "Must call setExConn first." << std::endl;
return;
}
#if DtHLA_1516
RTI::ParameterHandle numberHandle =
exerciseConn()->rtiAmb()->getParameterHandle(
interactionClassHandle(), L"Number");
RTI::ParameterHandle vectorHandle =
exerciseConn()->rtiAmb()->getParameterHandle(
interactionClassHandle(), L"Vector");
RTI::ParameterHandleValueMap::const_iterator pos = pvMap.find(numberHandle);
if (pos != pvMap.end())
{
setNumber((int)*netNum);
}
pos = pvMap.find(vectorHandle);
if (pos != pvMap.end())
{
}
#else
RTI::ParameterHandle numberHandle =
exerciseConn()->rtiAmb()->getParameterHandle("Number",
interactionClassHandle());
RTI::ParameterHandle vectorHandle =
exerciseConn()->rtiAmb()->getParameterHandle("Vector",
interactionClassHandle());
RTI::ULong index = 0;
for (index = 0; index < pvSet.size(); index++)
{
RTI::ParameterHandle currentHandle = pvSet.getHandle(index);
if (currentHandle == numberHandle)
{
RTI::ULong length = 0;
pvSet.getValue(index, (char*) &netNum, length);
setNumber((int)netNum);
}
else if (currentHandle == vectorHandle)
{
RTI::ULong length = 0;
pvSet.getValue(index, (char*) &netVec, length);
}
}
#endif
}
void TestSimpleInteraction::setNumber(int num)
{
myNum = num;
}
int TestSimpleInteraction::number() const
{
return myNum;
}
void TestSimpleInteraction::setVector(
const DtVector& vec)
{
myVec = vec;
}
const DtVector& TestSimpleInteraction::vector()
const
{
return myVec;
}
{
return new TestSimpleInteraction();
}
TestSimpleInteractionCb cb, void* usr)
{
conn->addInteractionCallbackByName(
"Test", (DtReceiveInteractionCb) cb, usr);
conn->interactionFactory()->addCreator(
#if DtHLA_1516
conn->rtiAmb()->getInteractionClassHandle(L"Test"),
#else
conn->rtiAmb()->getInteractionClassHandle("Test"),
#endif
TestSimpleInteraction::create);
}
TestSimpleInteractionCb cb, void* usr)
{
conn->removeInteractionCallbackByName(
"Test", (DtReceiveInteractionCb) cb, usr);
}
const char* TestSimpleInteraction::interactionClassToUse(
DtExerciseConn* exConn)
const
{
return "Test";
}
#endif