⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 federation.cc

📁 分布式仿真 开放源码
💻 CC
📖 第 1 页 / 共 4 页
字号:
    throw (InteractionClassNotDefined,           FederateNotExecutionMember,           SaveInProgress,           SecurityError,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw InteractionClassNotDefined    root->Interactions->publish(federate, interaction, pub);    D.Out(pdRequest,          "Federation %d: Federate %d has(un)published Interaction %d.",          handle, federate, interaction);}// ----------------------------------------------------------------------------// publishObjectvoidFederation::publishObject(FederateHandle federate,                          ObjectClassHandle object,                          AttributeHandle *attributes,                          UShort list_size,                          bool pub)    throw (ObjectClassNotDefined,           AttributeNotDefined,           FederateNotExecutionMember,           SaveInProgress,           SecurityError,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw *NotDefined    root->ObjectClasses->publish(federate, object, attributes, list_size, pub);    D.Out(pdRegister,          "Federation %d: Federate %d(un)publishes %d attrib. of ObjClass %d.",          handle, federate, list_size, object);}// ----------------------------------------------------------------------------//! Adds a new object instance to federation.ObjectHandleFederation::registerObject(FederateHandle federate,                           ObjectClassHandle class_handle,                           const char *object_name)    throw (FederateNotExecutionMember,           FederateNotPublishing,           ObjectAlreadyRegistered,           ObjectClassNotDefined,           ObjectClassNotPublished,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    ObjectHandle new_id = objectHandles.provide();    D.Out(pdRegister,          "Federation %d: Federate %d registering Object %d of Class %d.",          handle, federate, new_id, class_handle);    // create a name if necessary    string strname = "" ;    strname += object_name ? string(object_name) : "HLA" + new_id ;    // Register Object.    root->registerObjectInstance(federate, class_handle, new_id, 				 strname.c_str());    return new_id ;}// ----------------------------------------------------------------------------/** Remove a federate.    @param federate_handle Handle of the federate to remove.    @bug Currently does not check if Federate owns attributes. The    Federate Object is deleted.*/voidFederation::remove(FederateHandle federate_handle)    throw (FederateOwnsAttributes, FederateNotExecutionMember){    for (list<Federate *>::iterator i = begin(); i != end(); i++) {        if ((*i)->getHandle() == federate_handle) {            // BUG: RemoveFederate: Should see if Federate owns attributes	    federateHandles.free(federate_handle);            delete (*i);            erase(i);            D.Out(pdInit, "Federation %d: Removed Federate %d.", handle,                  federate_handle);            return ;        }    }    D.Out(pdExcept, "Federation %d could not remove unknown federate %d.",          handle, federate_handle);    throw FederateNotExecutionMember();}// ----------------------------------------------------------------------------//! Set Federate's IsConstrained to false.voidFederation::removeConstrained(FederateHandle federate_handle)    throw (FederateNotExecutionMember,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember    Federate *federate = getByHandle(federate_handle);    if (federate->isConstrained() == false) {        D.Out(pdExcept, "Federate %d was not constrained.", federate_handle);        throw RTIinternalError("Time constrained not enabled.");    }    federate->setConstrained(false);    D.Out(pdTerm, "Federation %d: Federate %d is not constrained anymore.",          handle, federate_handle);}// ----------------------------------------------------------------------------//! Remove the Federate from the Regulators' list.voidFederation::removeRegulator(FederateHandle federate_handle)    throw (FederateNotExecutionMember,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember    Federate *federate = getByHandle(federate_handle);    // It may throw RTIinternalError if Federate was not regulators.    regulators.remove(federate_handle);    federate->setRegulator(false);    D.Out(pdTerm, "Federation %d: Federate %d is not a regulator anymore.",          handle, federate_handle);    NetworkMessage msg ;    msg.type = NetworkMessage::SET_TIME_REGULATING ;    msg.exception = e_NO_EXCEPTION ;    msg.federation = handle ;    msg.federate = federate_handle ;    msg.regulator = RTI_FALSE ;    msg.date = 0 ;    broadcastAnyMessage(&msg, 0);}// ----------------------------------------------------------------------------//! unregisterSynchronization.voidFederation::unregisterSynchronization(FederateHandle federate_handle,                                      const char *label)    throw (FederateNotExecutionMember,           FederationNotPaused,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    this->check(federate_handle); // It may throw FederateNotExecutionMember.    if ((label == NULL) || (strlen(label) > MAX_USER_TAG_LENGTH))        throw RTIinternalError("Bad pause label(null or too long).");    // Set federate synchronized on this label.    Federate *federate = getByHandle(federate_handle);    federate->removeSynchronizationLabel(label);    // Test in every federate is synchronized. Otherwise, quit method.    list<Federate *>::iterator j ;    for (j = begin(); j != end(); j++) {        if ((*j)->isSynchronizationLabel(label) == true)            return ;    }    // All federates from federation has called synchronizationPointAchieved.    D.Out(pdTerm, "Federation %d is not Paused anymore.", handle);    // Remove label from federation list.    std::map<const char *, const char *>::iterator i ;    i = synchronizationLabels.begin();    for (; i != synchronizationLabels.end(); i++) {        if (!strcmp((*i).first, label)) {            // Allocated by strdup().            free(const_cast<char *>((*i).first));            free(const_cast<char *>((*i).second));            synchronizationLabels.erase(i);            break ;        }    }    // send a federationSynchronized().    NetworkMessage msg ;    msg.type = NetworkMessage::FEDERATION_SYNCHRONIZED ;    msg.exception = e_NO_EXCEPTION ;    msg.federation = handle ;    msg.federate = federate_handle ;    msg.setLabel(label);    broadcastAnyMessage(&msg, 0);    D.Out(pdTerm, "Federation %d is synchronized on %s.", handle, label);}// ----------------------------------------------------------------------------// subscribeInteractionvoidFederation::subscribeInteraction(FederateHandle federate,                                 InteractionClassHandle interaction,                                 bool sub)    throw (InteractionClassNotDefined,           FederateNotExecutionMember,           SaveInProgress,           SecurityError,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw *NotDefined    root->Interactions->subscribe(federate, interaction, sub);    D.Out(pdRegister,          "Federation %d: Federate %d(un)subscribes to Interaction %d.",          handle, federate, interaction);}// ----------------------------------------------------------------------------// subscribeObjectvoidFederation::subscribeObject(FederateHandle federate,                            ObjectClassHandle object,                            AttributeHandle *attributes,                            UShort list_size,                            bool sub)    throw (ObjectClassNotDefined,           AttributeNotDefined,           FederateNotExecutionMember,           SaveInProgress,           SecurityError,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw *NotDefined    root->ObjectClasses->subscribe(federate, object, attributes, list_size, sub);    D.Out(pdRegister,          "Federation %d: Federate %d(un)sub. to %d attrib. of ObjClass %d.",          handle, federate, list_size, object);}// ----------------------------------------------------------------------------// updateAttributeValuesvoidFederation::updateAttributeValues(FederateHandle federate,                                  ObjectHandle id,                                  AttributeHandle *attributes,                                  AttributeValue *values,                                  UShort list_size,                                  FederationTime time,                                  const char *tag)    throw (FederateNotExecutionMember,           ObjectNotKnown,           AttributeNotDefined,           AttributeNotOwned,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw *NotDefined    root->ObjectClasses->updateAttributeValues(federate, id, attributes, values,                                               list_size, time, tag);    D.Out(pdRegister,          "Federation %d: Federate %d updated attributes of Object %d.",          handle, federate, id);}// ----------------------------------------------------------------------------//! Update the current time of a regulator federate.voidFederation::updateRegulator(FederateHandle federate_handle,                            FederationTime time)    throw (FederateNotExecutionMember,           RTIinternalError){    // It may throw FederateNotExecutionMember    Federate *federate = getByHandle(federate_handle);    if (federate->isRegulator() == false) {        D.Out(pdExcept, "Federate %d is not a regulator.", federate_handle);        throw RTIinternalError("Time regulation not enabled.");    }    D.Out(pdTerm, "Federation %d: Federate %d's new time is %f.",          handle, federate_handle, time);    regulators.update(federate_handle, time);    NetworkMessage msg ;    msg.type = NetworkMessage::MESSAGE_NULL ;    msg.exception = e_NO_EXCEPTION ;    msg.federation = handle ;    msg.federate = federate_handle ;    msg.date = time ;    broadcastAnyMessage(&msg, federate_handle);}// ----------------------------------------------------------------------------// isOwner (isAttributeOwnedByFederate)boolFederation::isOwner(FederateHandle federate,                    ObjectHandle id,                    AttributeHandle attribute)    throw (FederateNotExecutionMember,           ObjectNotKnown,           AttributeNotDefined,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    D.Out(pdDebug, "Owner of Object %u Atrribute %u", id, attribute);    // It may throw *NotDefined    return root->objects->isAttributeOwnedByFederate(id, attribute, federate);}// ----------------------------------------------------------------------------// queryAttributeOwnershipvoidFederation::queryAttributeOwnership(FederateHandle federate,                                    ObjectHandle id,                                    AttributeHandle attribute)    throw (FederateNotExecutionMember,           ObjectNotKnown,           AttributeNotDefined,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    D.Out(pdDebug, "Owner of Object %u Atrribute %u", id, attribute);    // It may throw *NotDefined    root->objects->queryAttributeOwnership(id, attribute, federate);}// ----------------------------------------------------------------------------// negotiateDivestiture (negotiatedAttributeOwnershipDivestiture)voidFederation::negotiateDivestiture(FederateHandle federate,                                 ObjectHandle id,                                 AttributeHandle *attribs,                                 UShort list_size,                                 const char *tag)    throw (FederateNotExecutionMember,           ObjectNotKnown,           AttributeNotDefined,           AttributeNotOwned,           AttributeAlreadyBeingDivested,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw *NotDefined    root->ObjectClasses->negotiatedAttributeOwnershipDivestiture(federate,                                                                 id,                                                                 attribs,                                                                 list_size,                                                                 tag);}// ----------------------------------------------------------------------------// acquireIfAvailable (attributeOwnershipAcquisitionIfAvailable)voidFederation::acquireIfAvailable(FederateHandle federate,                               ObjectHandle id,                               AttributeHandle *attribs,                               UShort list_size)    throw (ObjectNotKnown,           ObjectClassNotPublished,           AttributeNotDefined,           AttributeNotPublished,           FederateOwnsAttributes,           AttributeAlreadyBeingAcquired,           FederateNotExecutionMember,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    // It may throw *NotDefined    root->ObjectClasses->attributeOwnershipAcquisitionIfAvailable(federate,                                                                  id,                                                                  attribs,                                                                  list_size);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -