本文整理汇总了C++中NetIO类的典型用法代码示例。如果您正苦于以下问题:C++ NetIO类的具体用法?C++ NetIO怎么用?C++ NetIO使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了NetIO类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setSlotNetworks
//------------------------------------------------------------------------------
// setSlotNetworks() -- Set our list of networks
//------------------------------------------------------------------------------
bool Station::setSlotNetworks(Basic::PairStream* const a)
{
bool ok = true;
// Remove the old networks list
if (networks != 0) {
// we are no longer the container for these networks
for (Basic::List::Item* item = networks->getFirstItem(); item != 0; item = item->getNext()) {
Basic::Pair* pair = (Basic::Pair*)(item->getValue());
NetIO* p = (NetIO*)( pair->object() );
p->container(0);
}
}
// Set our network list pointer
networks = a;
// Make sure the new network list is setup correctly
if (networks != 0) {
for (Basic::List::Item* item = networks->getFirstItem(); item != 0; item = item->getNext()) {
Basic::Pair* pair = (Basic::Pair*)(item->getValue());
NetIO* p = dynamic_cast<NetIO*>( pair->object() );
if (p != 0) {
// We are this network's container
p->container(this);
}
else {
// Not of the proper type
std::cerr << "Player::setSlotNetworks: network at slot \"" << pair->slot() << "\" is not of class type NetIO" << std::endl;
ok = false;
}
}
}
return ok;
}
示例2: getClassIndex
//------------------------------------------------------------------------------
// entityStateManager() -- (Output support)
// -- Update the entity object for this NIB(Player)
//------------------------------------------------------------------------------
bool Nib::entityStateManager(const double curExecTime)
{
bool ok = true;
if (getPlayer()->isMode(simulation::Player::ACTIVE) && isPlayerStateUpdateRequired(curExecTime)) {
// Need to update this entity object ...
NetIO* netIO = static_cast<NetIO*>(getNetIO());
RTI::RTIambassador* rtiAmb = netIO->getRTIambassador();
// ---
// First, make sure this entity has been registered
// ---
if (!isRegistered()) {
try {
RTI::ObjectClassHandle theClassHandle = netIO->getObjectClassHandle( getClassIndex() );
makeObjectName();
setObjectHandle( rtiAmb->registerObjectInstance( theClassHandle, getObjectName() ) );
netIO->addNibToObjectTables(this, simulation::NetIO::OUTPUT_NIB);
std::cout << "rprfom::Nib::updateEntity(): Register entity: " << getObjectName() << " handle = " << getObjectHandle() << std::endl;
}
catch (RTI::Exception& e) {
std::cerr << &e << std::endl;
ok = false;
}
}
// ---
// Next, update the entity's attribute values ...
// ---
if ( ok && isRegistered()) {
try {
// Create the attribute-value pair set
RTI::AttributeHandleValuePairSet* attrs = nullptr;
attrs = RTI::AttributeSetFactory::create( NetIO::NUM_OBJECT_ATTRIBUTES );
// Load the set with updated attribute values
updateBasicEntity(attrs,curExecTime);
updatePhysicalEntity(attrs,curExecTime);
updatePlatform(attrs,curExecTime);
// Send attributes to the RTI
//std::cout << "RprFom::Nib::updateEntity(): Update entity: " << getObjectName() << " handle = " << getObjectHandle() << std::endl;
ok = netIO->updateAttributeValues(getObjectHandle(), attrs);
delete attrs;
}
catch (RTI::Exception& e) {
std::cerr << &e << std::endl;
ok = false;
}
}
} // end -- if active player needs an update
return ok;
}
示例3: setOwnshipByName
//------------------------------------------------------------------------------
// reset() -- Reset the station
//------------------------------------------------------------------------------
void Station::reset()
{
if (isMessageEnabled(MSG_INFO)) {
std::cout << "Station::reset()" << std::endl;
}
// Reset our major subsystems
if (sim != 0) sim->event(RESET_EVENT);
// ---
// Reset the ownship pointer
// ---
if (ownshipName != 0) {
setOwnshipByName( *ownshipName );
if (ownship == 0) {
// Ok, we had a list of players and an ownship player name, but still
// don't have an ownship pointer -- print an error message.
std::cerr << "Station::reset(): ownship not found: " << *ownshipName << std::endl;
}
}
// Reset the I/O Handlers
if (ioHandlers != 0) {
Basic::List::Item* item = ioHandlers ->getFirstItem();
while (item != 0) {
Basic::Pair* pair = (Basic::Pair*)(item->getValue());
Basic::IoHandler* p = (Basic::IoHandler*)( pair->object() );
p->event(RESET_EVENT);
item = item->getNext();
}
}
// Reset the OTW subsystems
if (otw != 0) {
Basic::List::Item* item = otw ->getFirstItem();
while (item != 0) {
Basic::Pair* pair = (Basic::Pair*)(item->getValue());
Otw* p = (Otw*)( pair->object() );
p->event(RESET_EVENT);
item = item->getNext();
}
}
// Reset the networks
if (networks != 0) {
Basic::List::Item* item = networks ->getFirstItem();
while (item != 0) {
Basic::Pair* pair = (Basic::Pair*)(item->getValue());
NetIO* p = (NetIO*)( pair->object() );
p->event(RESET_EVENT);
item = item->getNext();
}
}
BaseClass::reset();
}
示例4: throw
void Ambassador::turnInteractionsOff (
RTI::InteractionClassHandle theInteraction)
throw (
RTI::InteractionClassNotPublished,
RTI::FederateInternalError)
{
std::cout << "Ambassador::turnInteractionsOff(): " ;
NetIO* netIO = getNetIO();
int idx = netIO->findInteractionClassIndex(theInteraction);
if (idx != 0) {
std::cout << idx;
netIO->setInteractionEnabledFlag(idx,false);
}
std::cout << std::endl;
}
示例5: networks
//------------------------------------------------------------------------------
// processNetworkOutputTasks() -- Process network output tasks
//------------------------------------------------------------------------------
void Station::processNetworkOutputTasks(const LCreal dt)
{
Basic::Object::SPtr<Basic::PairStream> networks( getNetworks() );
if (networks != 0) {
Basic::List::Item* item = networks->getFirstItem();
while (item != 0) {
Basic::Pair* pair = (Basic::Pair*)(item->getValue());
NetIO* p = (NetIO*)( pair->object() );
p->outputFrame( dt );
item = item->getNext();
}
}
}
示例6: throw
//------------------------------------------------------------------------------
// turnUpdatesOffForObjectInstance
//------------------------------------------------------------------------------
void Ambassador::turnUpdatesOffForObjectInstance (
RTI::ObjectHandle theObject,
const RTI::AttributeHandleSet& theAttributes)
throw (
RTI::ObjectNotKnown,
RTI::AttributeNotOwned,
RTI::FederateInternalError)
{
//std::cout << "Ambassador:turnUpdatesOffForObjectInstance(): ";
// Find the output object
NetIO* netIO = getNetIO();
Nib* nib = static_cast<Nib*>(netIO->findNibByObjectHandle(theObject, NetIO::OUTPUT_NIB));
if (nib != 0) nib->turnUpdatesOff(theAttributes);
//std::cout << std::endl;
}
示例7: if
//------------------------------------------------------------------------------
// updatePhysicalEntity() -- (Output support)
// -- sets the PhysicalEntity attribute values that need to be updated
//
// -- We send all published PhysicalEntity attributes every time.
// The function isPlayerStateUpdateRequired() check if the player's state
// needs to be re-sent. Therefore, we're not checking the individual update
// required flags with isAttributeUpdateRequired(), but we do clear them
// with setAttributeUpdateRequiredFlag().
//
// (Also handles the host to network byte swapping)
//------------------------------------------------------------------------------
void Nib::updatePhysicalEntity(
RTI::AttributeHandleValuePairSet* attrs,
const double)
{
// PhysicalEntity??
PhysicalEntity* physicalEntity = dynamic_cast<PhysicalEntity*>(baseEntity);
if (physicalEntity != nullptr) {
// Our handler
NetIO* netIO = static_cast<NetIO*>(getNetIO());
// Force Identifier
if (isAttributeUpdateEnabled(NetIO::FORCE_IDENTIFIER_AI)) {
// Force ID: When mapping Player side to force IDs ...
if (getSide() == simulation::Player::BLUE) {
// blue's are friendly, ...
physicalEntity->forceIdentifier = FRIENDLY;
}
else if (getSide() == simulation::Player::RED) {
// red's are not, ...
physicalEntity->forceIdentifier = OPPOSING;
}
else if (getSide() == simulation::Player::WHITE) {
// white is neutral, ...
physicalEntity->forceIdentifier = NEUTRAL;
}
else {
// and everyone else is type OTHER.
physicalEntity->forceIdentifier = OTHER;
}
//std::cout << "Send force: " << physicalEntity->forceIdentifier << std::endl;;
unsigned char netBuffer = static_cast<unsigned char>(physicalEntity->forceIdentifier); // 8 bits enum type (ForceIdentifierEnum8)
attrs->add(netIO->getObjectAttributeHandle(
NetIO::FORCE_IDENTIFIER_AI),
reinterpret_cast<char*>(&netBuffer),
sizeof(netBuffer)
);
setAttributeUpdateRequiredFlag(NetIO::FORCE_IDENTIFIER_AI, false);
}
}
}
示例8: getPlayer
//------------------------------------------------------------------------------
// entityStateManager() -- (Output support)
// -- Update the entity object for this NIB(Player)
//------------------------------------------------------------------------------
bool Nib::entityStateManager(const LCreal curExecTime)
{
bool ok = false;
// Get the player pointer
const Simulation::Player* player = getPlayer();
if (player == nullptr) return ok;
// Dummy weapon?
const Simulation::Weapon* ww = dynamic_cast<const Simulation::Weapon*>( player );
if (ww != nullptr) {
if (ww->isDummy()) return ok;
}
if (isPlayerStateUpdateRequired(curExecTime)) {
//
// Send an entity state PDU
// 1) create buffer
// 2) set state information
// 3) send data
//
// Get our NetIO and the main simulation
NetIO* disIO = static_cast<NetIO*>(getNetIO());
Simulation::Simulation* sim = disIO->getSimulation();
// Capture the player data, reset the dead reckoning and
// mark the current time.
playerState2Nib();
// ---
// Create buffer and cast it as an entity state PDU
// ---
char pduBuffer[NetIO::MAX_PDU_SIZE];
EntityStatePDU* pdu = (EntityStatePDU*) &pduBuffer[0];
//
// Entity state PDU structure
// =========================================================
// PDUHeader header;
// EntityIdentifierDIS entityID;
// uint8_t forceID;
// uint8_t numberOfArticulationParameters;
// EntityType entityType;
// EntityType alternativeType;
// VectorDIS entityLinearVelocity;
// WorldCoordinates entityLocation;
// EulerAngles entityOrientation;
// uint32_t appearance;
// uint8_t deadReckoningAlgorithm;
// uint8_t otherParameters[15];
// VectorDIS DRentityLinearAcceleration;
// AngularVelocityVectorDIS DRentityAngularVelocity;
// EntityMarking entityMarking;
// uint32_t capabilities;
// =========================================================
//
// ---
// Standard header (PDUHeader)
// ---
pdu->header.protocolVersion = disIO->getVersion();
pdu->header.exerciseIdentifier = disIO->getExerciseID();
pdu->header.PDUType = NetIO::PDU_ENTITY_STATE;
pdu->header.protocolFamily = NetIO::PDU_FAMILY_ENTITY_INFO;
//
if (disIO->getTimeline() == Simulation::NetIO::UTC)
pdu->header.timeStamp = disIO->makeTimeStamp( getTimeUtc(), true );
else
pdu->header.timeStamp = disIO->makeTimeStamp( getTimeExec(), false );
//
pdu->header.status = 0;
pdu->header.padding = 0;
// ---
// Entity ID (EntityIdentifierID)
// ---
pdu->entityID.simulationID.siteIdentification = getSiteID();
pdu->entityID.simulationID.applicationIdentification = getApplicationID();
pdu->entityID.ID = getPlayerID();
// ---
// Force ID: When mapping Player side to force IDs ...
// ---
if (getSide() == Simulation::Player::BLUE) {
// blue's are friendly, ...
pdu->forceID = NetIO::FRIENDLY_FORCE;
}
else if (getSide() == Simulation::Player::RED) {
// red's are not, ...
pdu->forceID = NetIO::OPPOSING_FORCE;
}
else if (getSide() == Simulation::Player::WHITE) {
// white is neutral, ...
pdu->forceID = NetIO::NEUTRAL_FORCE;
//.........这里部分代码省略.........
示例9: switch
//------------------------------------------------------------------------------
// reflectAttributeValues() -- (Input support)
// Called by our FederateAmbassador to update the attribute values for
// this object instance. (Also handles the network to host byte swapping)
//------------------------------------------------------------------------------
void Nib::reflectAttributeValues(const RTI::AttributeHandleValuePairSet& theAttrs)
{
NetIO* netIO = static_cast<NetIO*>(getNetIO());
if (netIO != nullptr && baseEntity != nullptr) {
// PhysicalEntity pointer
PhysicalEntity* physicalEntity = dynamic_cast<PhysicalEntity*>(baseEntity);
RTI::ULong length;
char netBuffer[1000];
for (RTI::ULong j = 0; j < theAttrs.size(); j++ ) {
// get the attribute's handle and data (network byte order)
RTI::AttributeHandle theAttr = theAttrs.getHandle(j);
theAttrs.getValue(j, netBuffer, length);
// Process the attribute
switch ( netIO->findAttributeIndex(theAttr) ) {
// Update Federate ID
case NetIO::ENTITY_IDENTIFIER_AI : {
EntityIdentifierStruct* net = reinterpret_cast<EntityIdentifierStruct*>(&netBuffer);
base::NetHandler::fromNetOrder(&baseEntity->entityIdentifier.federateIdentifier.applicationID, net->federateIdentifier.applicationID );
base::NetHandler::fromNetOrder(&baseEntity->entityIdentifier.federateIdentifier.siteID, net->federateIdentifier.siteID );
base::NetHandler::fromNetOrder(&baseEntity->entityIdentifier.entityNumber, net->entityNumber );
setAttributeUpdateRequiredFlag(NetIO::ENTITY_IDENTIFIER_AI, true);
}
break;
// Update Entity Type
case NetIO::ENTITY_TYPE_AI : {
EntityTypeStruct* net = reinterpret_cast<EntityTypeStruct*>(&netBuffer);
// All bytes except for country
baseEntity->entityType = *net;
base::NetHandler::fromNetOrder(&baseEntity->entityType.countryCode, net->countryCode );
setAttributeUpdateRequiredFlag(NetIO::ENTITY_TYPE_AI, true);
}
break;
// Update Spatial
case NetIO::SPATIAL_AI : {
// NIB's base entity structure pointers
SpatialStruct* spatial = &(baseEntity->spatial);
SpatialRVStruct* spatialRvw = &(baseEntity->spatialRvw);
WorldLocationStruct* worldLocation = &spatialRvw->worldLocation;
OrientationStruct* orientation = &spatialRvw->orientation;
VelocityVectorStruct* velocityVector = &spatialRvw->velocityVector;
AccelerationVectorStruct* accelerationVector = &spatialRvw->accelerationVector;
AngularVelocityVectorStruct* angularVelocity = &spatialRvw->angularVelocity;
// Net buffer component pointers
SpatialStruct* netSpatial = reinterpret_cast<SpatialStruct*>(&netBuffer[0]);
WorldLocationStruct* netWorldLocation = nullptr;
OrientationStruct* netOrientation = nullptr;
VelocityVectorStruct* netVelocityVector = nullptr;
AccelerationVectorStruct* netAccelerationVector = nullptr;
AngularVelocityVectorStruct* netAngularVelocity = nullptr;
// Dead reckoning
spatial->deadReckoningAlgorithm = netSpatial->deadReckoningAlgorithm;
// find network components based on dead reckoning algorithm
// (and set the isFrozen flag)
switch (spatial->deadReckoningAlgorithm) {
case DRM_STATIC : {
SpatialStaticStruct* netSpatialStatic = reinterpret_cast<SpatialStaticStruct*>(&netBuffer[sizeof(SpatialStruct)]);
spatialRvw->isFrozen = netSpatialStatic->isFrozen;
netWorldLocation = &netSpatialStatic->worldLocation;
netOrientation = &netSpatialStatic->orientation;
}
break;
case DRM_FPW : {
SpatialFPStruct* netSpatialFpw = reinterpret_cast<SpatialFPStruct*>(&netBuffer[sizeof(SpatialStruct)]);
spatialRvw->isFrozen = netSpatialFpw->isFrozen;
netWorldLocation = &netSpatialFpw->worldLocation;
netOrientation = &netSpatialFpw->orientation;
netVelocityVector = &netSpatialFpw->velocityVector;
}
break;
case DRM_RPW : {
SpatialRPStruct* netSpatialRpw = reinterpret_cast<SpatialRPStruct*>(&netBuffer[sizeof(SpatialStruct)]);
spatialRvw->isFrozen = netSpatialRpw->isFrozen;
netWorldLocation = &netSpatialRpw->worldLocation;
netOrientation = &netSpatialRpw->orientation;
netVelocityVector = &netSpatialRpw->velocityVector;
netAngularVelocity = &netSpatialRpw->angularVelocity;
}
//.........这里部分代码省略.........
示例10: playerState2Nib
//------------------------------------------------------------------------------
// updateBasicEntity() -- (Output support)
// -- sets the BasicEntity attribute values that need to be updated
//
// -- We send all published BasicEntity attributes every time.
//
// The function isPlayerStateUpdateRequired() checking if the player's state
// needs to be resent. Therefore, we're not check the individual update
// required flags with isAttributeUpdateRequired(), but we do clear them
// with setAttributeUpdateRequiredFlag().
//
// (Also handles the host to network byte swapping)
//------------------------------------------------------------------------------
void Nib::updateBasicEntity(
RTI::AttributeHandleValuePairSet* attrs,
const double)
{
if (baseEntity != nullptr) {
// Our handler
NetIO* netIO = static_cast<NetIO*>(getNetIO());
// Our simulation
simulation::Simulation* ourSim = netIO->getSimulation();
// Get the player data
playerState2Nib();
// Entity ID
if (isAttributeUpdateEnabled(NetIO::ENTITY_IDENTIFIER_AI)) {
EntityIdentifierStruct* entityId = &baseEntity->entityIdentifier;
entityId->federateIdentifier.siteID = getSiteID();
entityId->federateIdentifier.applicationID = getApplicationID();
entityId->entityNumber = getPlayerID();
//std::cout << "Send Federate ID: (" << entityId->entityNumber << "," << entityId->federateIdentifier.applicationID << "," << entityId->federateIdentifier.siteID << ")" << std::endl;
EntityIdentifierStruct netBuffer;
base::NetHandler::toNetOrder(&netBuffer.federateIdentifier.applicationID, entityId->federateIdentifier.applicationID );
base::NetHandler::toNetOrder(&netBuffer.federateIdentifier.siteID, entityId->federateIdentifier.siteID );
base::NetHandler::toNetOrder(&netBuffer.entityNumber, entityId->entityNumber );
attrs->add(netIO->getObjectAttributeHandle(
NetIO::ENTITY_IDENTIFIER_AI),
reinterpret_cast<char*>(&netBuffer),
sizeof(EntityIdentifierStruct)
);
setAttributeUpdateRequiredFlag(NetIO::ENTITY_IDENTIFIER_AI, false);
}
// Entity Type
if (isAttributeUpdateEnabled(NetIO::ENTITY_TYPE_AI)) {
EntityTypeStruct* entityType = &baseEntity->entityType;
entityType->entityKind = getEntityKind();
entityType->domain = getEntityDomain();
entityType->countryCode = getEntityCountry();
entityType->category = getEntityCategory();
entityType->subcategory = getEntitySubcategory();
entityType->specific = getEntitySpecific();
entityType->extra = getEntityExtra();
// Network byte order: all bytes except country code which is unsigned short.
EntityTypeStruct netBuffer = *entityType;
base::NetHandler::toNetOrder(&netBuffer.countryCode, entityType->countryCode );
attrs->add(netIO->getObjectAttributeHandle(
NetIO::ENTITY_TYPE_AI),
reinterpret_cast<char*>(&netBuffer),
sizeof(EntityTypeStruct)
);
setAttributeUpdateRequiredFlag(NetIO::ENTITY_TYPE_AI, false);
}
// Spatial Structure
if (isAttributeUpdateEnabled(NetIO::SPATIAL_AI)) {
osg::Vec3d pos = getDrPosition();
osg::Vec3d vel = getDrVelocity();
osg::Vec3d accel = getDrAcceleration();
osg::Vec3d angles = getDrEulerAngles();
osg::Vec3d arates = getDrAngularVelocities();
// NIB's base entity structures
SpatialStruct* spatial = &(baseEntity->spatial);
SpatialRVStruct* spatialRvw = &(baseEntity->spatialRvw);
// Net order buffer (used to send the attribute to the RTI)
const unsigned int SPATIAL_NET_BUFFER_SIZE = sizeof(SpatialStruct) + sizeof(SpatialRVStruct);
unsigned char netBuffer[SPATIAL_NET_BUFFER_SIZE];
SpatialStruct* netSpatial = reinterpret_cast<SpatialStruct*>(&netBuffer[0]);
SpatialRVStruct* netSpatialRvw = reinterpret_cast<SpatialRVStruct*>(&netBuffer[sizeof(SpatialStruct)]);
// Ref Position
double refLat = 0.0;
double refLon = 0.0;
if (ourSim != nullptr) {
refLat = ourSim->getRefLatitude();
refLon = ourSim->getRefLongitude();
}
//.........这里部分代码省略.........
示例11: getPlayer
//------------------------------------------------------------------------------
// munitionDetonationMsgFactory() -- (Output) Munition detonation message factory
//------------------------------------------------------------------------------
bool Nib::munitionDetonationMsgFactory(const LCreal)
{
// Dummy weapon?
const Simulation::Weapon* ww = dynamic_cast<const Simulation::Weapon*>( getPlayer() );
if (ww != 0) {
if (ww->isDummy()) return true;
}
bool ok = true;
//std::cout << "NetIO::munitionDetonationMsgFactory() HERE!!" << std::endl;
// Get our NetIO
NetIO* disIO = (NetIO*)(getNetIO());
// If our NIB's player just detonated, then it must be a weapon!
Simulation::Weapon* mPlayer = dynamic_cast<Simulation::Weapon*>(getPlayer());
if (mPlayer == 0) return false;
// Ok, we have the weapon, now get the firing and target players
Simulation::Player* tPlayer = mPlayer->getTargetPlayer();
Simulation::Player* fPlayer = mPlayer->getLaunchVehicle();
if (fPlayer == 0) return false;
// ---
// PDU header
// ---
DetonationPDU pdu;
pdu.header.protocolVersion = disIO->getVersion();
pdu.header.PDUType = NetIO::PDU_DETONATION;
pdu.header.protocolFamily = NetIO::PDU_FAMILY_WARFARE;
pdu.header.length = sizeof(DetonationPDU);
pdu.header.exerciseIdentifier = disIO->getExerciseID();
pdu.header.timeStamp = disIO->timeStamp();
pdu.header.status = 0;
pdu.header.padding = 0;
// ---
// Set the PDU data with the firing (launcher) player's id
// ---
pdu.firingEntityID.ID = fPlayer->getID();
pdu.firingEntityID.simulationID.siteIdentification = getSiteID();
pdu.firingEntityID.simulationID.applicationIdentification = getApplicationID();
// ---
// Set the PDU data with the munition's ID
// ---
pdu.munitionID.ID = mPlayer->getID();
pdu.munitionID.simulationID.siteIdentification = getSiteID();
pdu.munitionID.simulationID.applicationIdentification = getApplicationID();
// ---
// Set the PDU data with the target's ID
// ---
{
bool tOk = false;
if (tPlayer != 0) {
pdu.targetEntityID.ID = tPlayer->getID();
if (tPlayer->isLocalPlayer()) {
// Local player, use our site/app/exerc IDs
pdu.targetEntityID.simulationID.siteIdentification = getSiteID();
pdu.targetEntityID.simulationID.applicationIdentification = getApplicationID();
tOk = true;
}
else {
// Networked player, use its NIB's IDs
const Nib* fNIB = dynamic_cast<const Nib*>( tPlayer->getNib() );
if (fNIB != 0) {
pdu.targetEntityID.simulationID.siteIdentification = fNIB->getSiteID();
pdu.targetEntityID.simulationID.applicationIdentification = fNIB->getApplicationID();
tOk = true;
}
}
}
if (!tOk) {
pdu.targetEntityID.ID = 0;
pdu.targetEntityID.simulationID.siteIdentification = 0;
pdu.targetEntityID.simulationID.applicationIdentification = 0;
}
}
// ---
// Event ID
// ---
pdu.eventID.simulationID.siteIdentification = getSiteID();
pdu.eventID.simulationID.applicationIdentification = getApplicationID();
pdu.eventID.eventNumber = mPlayer->getReleaseEventID();
// ---
// Location & Velocity
// ---
// World Coordinates
osg::Vec3d geocPos = mPlayer->getGeocPosition();
pdu.location.X_coord = geocPos[Basic::Nav::IX];
pdu.location.Y_coord = geocPos[Basic::Nav::IY];
pdu.location.Z_coord = geocPos[Basic::Nav::IZ];
//.........这里部分代码省略.........
示例12: getPlayer
//------------------------------------------------------------------------------
// IffManager() -- (Output support) IFF manager
//------------------------------------------------------------------------------
bool Nib::IffManager(const double curExecTime)
{
NetIO* disIO = static_cast<NetIO*>(getNetIO());
const base::Pair* pair = getPlayer()->getRadioByType(typeid(models::Iff));
// OK if the player has an IFF transponder and we're the correct version.
bool ok = (disIO->getVersion() >= NetIO::VERSION_1278_1A) && (pair != nullptr);
if (ok) {
const models::Iff* iffSystem = static_cast<const models::Iff*>(pair->object());
if (isIffUpdateRequired(curExecTime, iffSystem)) {
// Standard header stuff
IffAtcNavaidsPDU pdu;
pdu.header.protocolVersion = disIO->getVersion();
pdu.header.exerciseIdentifier = disIO->getExerciseID();
pdu.header.PDUType = NetIO::PDU_IFF_ATC_NAVAIDS;
pdu.header.protocolFamily = NetIO::PDU_FAMILY_DIS_EMISSION_REG;
pdu.header.timeStamp = disIO->timeStamp();
pdu.header.length = sizeof(IffAtcNavaidsPDU);
// Entity ID
pdu.emittingEntityID.simulationID.siteIdentification = getSiteID();
pdu.emittingEntityID.simulationID.applicationIdentification = getApplicationID();
pdu.emittingEntityID.ID = getPlayerID();
// Location (default is center of parent entity)
pdu.location.component[0] = 0;
pdu.location.component[1] = 0;
pdu.location.component[2] = 0;
// System ID (for now just use a standard Mark X11; upgrade to type from IFF later)
pdu.systemID.systemType = 1; // Mark X11
pdu.systemID.systemName = 2; // Mark X11
pdu.systemID.systemMode = 0; // Other
pdu.systemID.options = iffOptions; // Option bits
// Functional operational data
pdu.operationalData.systemStatus = iffFunOpData->systemStatus;
pdu.operationalData.alternateParam4 = iffFunOpData->alternateParam4;
pdu.operationalData.informationLayers = iffFunOpData->informationLayers;
pdu.operationalData.modifier = iffFunOpData->modifier;
pdu.operationalData.param1 = iffFunOpData->param1;
pdu.operationalData.param2 = iffFunOpData->param2;
pdu.operationalData.param3 = iffFunOpData->param3;
pdu.operationalData.param4 = iffFunOpData->param4;
pdu.operationalData.param5 = iffFunOpData->param5;
pdu.operationalData.param6 = iffFunOpData->param6;
// Event ID
pdu.eventID.simulationID.siteIdentification = disIO->getSiteID();
pdu.eventID.simulationID.applicationIdentification = disIO->getApplicationID();
pdu.eventID.eventNumber = disIO->getNewIffEventID();
//pdu.dumpData();
if (base::NetHandler::isNotNetworkByteOrder()) pdu.swapBytes();
ok = disIO->sendData(reinterpret_cast<char*>(&pdu), sizeof(pdu));
iffLastExecTime = curExecTime;
}
}
return ok;
}
示例13: Send
template<typename... U> void Send(U&&... u)
{
m_NetIO.Send(std::forward<U>(u)...);
}
示例14: setMode
//------------------------------------------------------------------------------
// munitionDetonationMsgFactory() -- (Output) Munition detonation message factory
//------------------------------------------------------------------------------
bool Nib::munitionDetonationMsgFactory(const double)
{
std::cout << "rprfom::Nib::sendMunitionDetonation() HERE!!" << std::endl;
// Early out -- we must be registered
if (!isRegistered()) return false;
NetIO* netIO = static_cast<NetIO*>(getNetIO());
// Create the parameter/value set
RTI::ParameterHandleValuePairSet* pParams =
RTI::ParameterSetFactory::create( NetIO::NUM_INTERACTION_PARAMETER );
// Set our mode so that we don't do this again.
setMode(simulation::Player::DETONATED);
// If our player just detonated, then it must be a weapon!
simulation::Weapon* mPlayer = dynamic_cast<simulation::Weapon*>(getPlayer());
if (mPlayer == nullptr) return false; // Early out -- it wasn't a weapon
// ---
// Event ID
// ---
unsigned short fireEvent = getWeaponFireEvent();
EventIdentifierStruct eventIdentifier;
base::NetHandler::toNetOrder(&eventIdentifier.eventCount, fireEvent);
base::utStrncpy(
reinterpret_cast<char*>(&eventIdentifier.issuingObjectIdentifier.id[0]),
sizeof(eventIdentifier.issuingObjectIdentifier.id),
getObjectName(),
RTIObjectIdStruct::ID_SIZE );
pParams->add(
netIO->getInteractionParameterHandle(NetIO::EVENT_IDENTIFIER_MD_PI),
reinterpret_cast<char*>(&eventIdentifier),
sizeof(EventIdentifierStruct) );
// ---
// Location & Velocity
// ---
{
osg::Vec3d geocPos = getDrPosition();
osg::Vec3d geocVel = getDrVelocity();
osg::Vec3d geocAcc = getDrAcceleration();
// World Coordinates
WorldLocationStruct detonationLocation;
base::NetHandler::toNetOrder(&detonationLocation.x, geocPos[base::Nav::IX]);
base::NetHandler::toNetOrder(&detonationLocation.y, geocPos[base::Nav::IY]);
base::NetHandler::toNetOrder(&detonationLocation.z, geocPos[base::Nav::IZ]);
pParams->add(
netIO->getInteractionParameterHandle(NetIO::DETONATION_LOCATION_MD_PI),
reinterpret_cast<char*>(&detonationLocation),
sizeof(WorldLocationStruct) );
// Velocity
VelocityVectorStruct finalVelocityVector;
base::NetHandler::toNetOrder(&finalVelocityVector.xVelocity, static_cast<float>(geocVel[base::Nav::IX]));
base::NetHandler::toNetOrder(&finalVelocityVector.yVelocity, static_cast<float>(geocVel[base::Nav::IY]));
base::NetHandler::toNetOrder(&finalVelocityVector.zVelocity, static_cast<float>(geocVel[base::Nav::IZ]));
pParams->add(
netIO->getInteractionParameterHandle(NetIO::FINAL_VELOCITY_VECTOR_MD_PI),
reinterpret_cast<char*>(&finalVelocityVector),
sizeof(VelocityVectorStruct) );
}
// ---
// Munition Object identifiers:
// ---
{
RTIObjectIdStruct munitionObjectIdentifier;
base::utStrncpy(
reinterpret_cast<char*>(&munitionObjectIdentifier.id[0]),
sizeof(munitionObjectIdentifier.id),
getObjectName(),
RTIObjectIdStruct::ID_SIZE );
pParams->add(
netIO->getInteractionParameterHandle(NetIO::MUNITION_OBJECT_IDENTIFIER_MD_PI),
reinterpret_cast<char*>(&munitionObjectIdentifier),
sizeof(RTIObjectIdStruct) );
}
// ---
// Firing Object identifier:
//
// Get the firing player and its NIB.
// First check to see if it's an IPlayer from an HLA network.
// If it's not, then check our output list.
// ---
{
Nib* fNib = nullptr;
simulation::Player* fPlayer = mPlayer->getLaunchVehicle();
if (fPlayer != nullptr) {
if (fPlayer->isNetworkedPlayer()) {
fNib = dynamic_cast<Nib*>( fPlayer->getNib() );
}
else {
fNib = dynamic_cast<Nib*>( netIO->findNib(fPlayer, simulation::NetIO::OUTPUT_NIB) );
//.........这里部分代码省略.........
示例15: setMode
//------------------------------------------------------------------------------
// weaponFireMsgFactory() -- (Output support) Weapon fire message factory
//------------------------------------------------------------------------------
bool Nib::weaponFireMsgFactory(const LCreal)
{
bool ok = true;
//std::cout << "NetIO::weaponFireMsgFactory() HERE!!" << std::endl;
// Get our NetIO
NetIO* disIO = (NetIO*)(getNetIO());
//Simulation* sim = disIO->getSimulation();
// Set the NIB mode so that we don't do this again.
setMode(Simulation::Player::ACTIVE);
// Our NIB's player is a weapon that just became active
Simulation::Weapon* mPlayer = (Simulation::Weapon*)(getPlayer());
// Ok, we have the weapon, now get the firing and target players
Simulation::Player* tPlayer = mPlayer->getTargetPlayer();
Simulation::Player* fPlayer = mPlayer->getLaunchVehicle();
if (fPlayer == 0) return false;
// ---
// PDU header
// ---
FirePDU pdu;
pdu.header.protocolVersion = disIO->getVersion();
pdu.header.exerciseIdentifier = disIO->getExerciseID();
pdu.header.PDUType = NetIO::PDU_FIRE;
pdu.header.protocolFamily = NetIO::PDU_FAMILY_WARFARE;
pdu.header.timeStamp = disIO->timeStamp();
pdu.header.length = sizeof(FirePDU);
// ---
// Set the PDU data with the firing (launcher) player's id
// ---
pdu.firingEntityID.ID = fPlayer->getID();
pdu.firingEntityID.simulationID.siteIdentification = disIO->getSiteID();
pdu.firingEntityID.simulationID.applicationIdentification = disIO->getApplicationID();
// ---
// Set the PDU data with the munition's ID
// ---
pdu.munitionID.ID = mPlayer->getID();
pdu.munitionID.simulationID.siteIdentification = disIO->getSiteID();
pdu.munitionID.simulationID.applicationIdentification = disIO->getApplicationID();
// ---
// Set the PDU data with the target's ID
// ---
{
bool tOk = false;
if (tPlayer != 0) {
pdu.targetEntityID.ID = tPlayer->getID();
if (tPlayer->isLocalPlayer()) {
// Local player, use our site/app/exerc IDs
pdu.targetEntityID.simulationID.siteIdentification = disIO->getSiteID();
pdu.targetEntityID.simulationID.applicationIdentification = disIO->getApplicationID();
tOk = true;
}
else {
const Nib* fNIB = dynamic_cast<const Nib*>( tPlayer->getNib() );
if (fNIB != 0) {
// Networked player, use it's NIB's IDs
pdu.targetEntityID.simulationID.siteIdentification = fNIB->getSiteID();
pdu.targetEntityID.simulationID.applicationIdentification = fNIB->getApplicationID();
tOk = true;
}
}
}
if (!tOk) {
// Networked player, use it's NIB's IDs
pdu.targetEntityID.ID = 0;
pdu.targetEntityID.simulationID.siteIdentification = 0;
pdu.targetEntityID.simulationID.applicationIdentification = 0;
}
}
// ---
// Event ID
// ---
pdu.eventID.simulationID.siteIdentification = disIO->getSiteID();
pdu.eventID.simulationID.applicationIdentification = disIO->getApplicationID();
pdu.eventID.eventNumber = mPlayer->getReleaseEventID();
// ---
// Location & Velociy
// ---
// World Coordinates
osg::Vec3d geocPos = mPlayer->getGeocPosition();
pdu.location.X_coord = geocPos[Basic::Nav::IX];
pdu.location.Y_coord = geocPos[Basic::Nav::IY];
pdu.location.Z_coord = geocPos[Basic::Nav::IZ];
// Velocity
osg::Vec3d geocVel = mPlayer->getGeocVelocity();
pdu.velocity.component[0] = (float)geocVel[Basic::Nav::IX];
pdu.velocity.component[1] = (float)geocVel[Basic::Nav::IY];
//.........这里部分代码省略.........