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

📄 federation.cc~

📁 certi-SHM-3.0.tar 不错的开源的分布式方针软件 大家多多支持 他是linux
💻 CC~
📖 第 1 页 / 共 3 页
字号:
           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate_handle);    root->Interactions->broadcastInteraction(federate_handle,                                             interaction,                                             parameter_handles,                                             parameter_values,                                             list_size,                                             time,                                             tag);    D.Out(pdRequest, "Federation %d: Broadcasted Interaction %d from Federate "          "%d nb params %d.", handle, interaction, federate_handle, list_size);    for (int i=0 ; i < list_size ; i++)        D.Out(pdRequest,              " Param %d Value %s",              parameter_handles[i],              parameter_values[i]);}// ----------------------------------------------------------------------------// deleteObjectvoidFederation::deleteObject(FederateHandle federate,                         ObjectHandle id,                         const char *tag)    throw (FederateNotExecutionMember,           DeletePrivilegeNotHeld,           ObjectNotKnown,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // It may throw FederateNotExecutionMember.    this->check(federate);    D.Out(pdRegister, "Federation %d: Federate %d destroys object %d.",          this->handle, federate, id);    root->ObjectClasses->deleteObject(federate, id, tag);}// ----------------------------------------------------------------------------//! registerSynchronization.voidFederation::registerSynchronization(FederateHandle federate,                                    const char *label,                                    const char *tag)    throw (FederateNotExecutionMember,           FederationAlreadyPaused,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    D.Out(pdTerm, "check federate");    this->check(federate); // It may throw FederateNotExecutionMember.    D.Out(pdTerm, "check federate done");    if ((label == NULL) || (strlen(label) > MAX_USER_TAG_LENGTH))        throw RTIinternalError("Bad pause label(null or too long).");    // Verify label does not already exists    D.Out(pdTerm, "verify map");    std::map<const char *, const char *>::const_iterator i ;    i = synchronizationLabels.begin();    for (; i != synchronizationLabels.end(); i++) {        if (!strcmp((*i).first, label)) {            throw FederationAlreadyPaused(); // Label already pending.        }    }D.Out(pdTerm, "synchronizationLabels insert");    // If not already in pending labels, insert to list.    synchronizationLabels.insert(pair<const char *, const char *>(strdup(label),                                                                  strdup(tag)));D.Out(pdTerm, "add label");    // Add label to each federate (may throw RTIinternalError).    list<Federate *>::iterator j ;    for (j = begin(); j != end(); j++) {        if((*j)==NULL)D.Out(pdTerm, "pointeur null");	else D.Out(pdTerm, "pointeur non null");        (*j)->addSynchronizationLabel(label);    }    D.Out(pdTerm, "Federation %d is now synchronizing for label %s.",          label, handle);}// ----------------------------------------------------------------------------voidFederation::broadcastSynchronization(FederateHandle federate,                                     const char *label,                                     const char *tag)    throw (RTIinternalError){    this->check(federate); // It may throw FederateNotExecutionMember.    if ((label == NULL) || (strlen(label) > MAX_USER_TAG_LENGTH))        throw RTIinternalError("Bad pause label(null or too long).");    // broadcast announceSynchronizationPoint() to all federates in federation.    NetworkMessage msg ;    msg.type = m_ANNOUNCE_SYNCHRONIZATION_POINT ;    msg.federate = federate ;    msg.federation = handle ;    msg.setLabel(label);    msg.setTag(tag);    broadcastAnyMessage(&msg, 0);}// ----------------------------------------------------------------------------//! Return a pointer of the Federate whose Handle is theHandle, if found.Federate*Federation::getByHandle(FederateHandle federate_handle) const    throw (FederateNotExecutionMember){    for (list<Federate *>::const_iterator i = begin(); i != end(); i++) {        if ((*i)->getHandle() == federate_handle)            return (*i);    }    throw FederateNotExecutionMember("Federate Handle not found.");}// ----------------------------------------------------------------------------//! Return a pointer of the Federate whose Name is theName, if found.Federate*Federation::getByName(const char *federate_name) const    throw (FederateNotExecutionMember){    for (list<Federate *>::const_iterator i = begin(); i != end(); i++) {        if (strcmp((*i)->getName(), federate_name) == 0)            return (*i);    }    throw FederateNotExecutionMember("Federate Name not found.");}// ----------------------------------------------------------------------------//! Return a brand new Federate Handle./*! Throw an exception if there are no more handles left(MAX_FEDERATEHANDLE). */FederateHandleFederation::getNewHandle(void)    throw (RTIinternalError){    if (nextFederateHandle > MAX_FEDERATEHANDLE) {        D.Out(pdExcept,              "Federation %d: Max Federate Handle count reached.", handle);        throw RTIinternalError("Max Federate Handle reached.");    }    FederateHandle new_handle = nextFederateHandle ;    nextFederateHandle++ ;    return new_handle ;}// ----------------------------------------------------------------------------// empty/*! Return true if there are no Federates left in the Federation, else throw  FederatesCurrentlyJoined.*/boolFederation::empty(void) const    throw (FederatesCurrentlyJoined){    if (list<Federate *>::empty())        return true ;    else        throw FederatesCurrentlyJoined();}// ----------------------------------------------------------------------------// check/*! Return true if the Federate is part of the Federation, else throw an  exception.*/boolFederation::check(FederateHandle federate_handle) const    throw (FederateNotExecutionMember){    for (list<Federate *>::const_iterator i = begin(); i != end(); i++) {        if ((*i)->getHandle() == federate_handle)            return true ;    }    throw FederateNotExecutionMember();}// ----------------------------------------------------------------------------// killFederate/*! This Method tries to remove all references to this Federate in the  Federation. To be used when a Federate is supposed to have crashed.*/voidFederation::kill(FederateHandle federate)    throw (){    // NOTE: Connection to the federate is already closed.    D.Out(pdInit, "Killing Federate %d.", federate);    // is regulator ?    try {        removeRegulator(federate);        D.Out(pdInit, "Regulator Federate %d removed...", federate);    } catch (Exception &e) {}    // is constrained ?    try {        removeConstrained(federate);        D.Out(pdInit, "Constrained Federate %d removed...", federate);    } catch (Exception &e) {}    // Supprime les references au federe pour les classes d'objets    D.Out(pdInit, "Federate %d removed from the Root Object tree...", federate);    root->ObjectClasses->killFederate(federate);    // Supprime les references au federe pour les classes d'interactions.    D.Out(pdInit, "Federate %d removed from the Root Inteaction tree...",          federate);    root->Interactions->killFederate(federate);    // delete from federations list    try {        remove(federate);        D.Out(pdInit, "Federate %d removed...", federate);    } catch (Exception &e) {}}// ----------------------------------------------------------------------------// publishInteractionvoidFederation::publishInteraction(FederateHandle federate,                               InteractionClassHandle interaction,                               bool pub)    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);}// ----------------------------------------------------------------------------// registerObjectObjectHandleFederation::registerObject(FederateHandle federate,                           ObjectClassHandle class_handle,                           ObjectName object_name)    throw (FederateNotExecutionMember,           FederateNotPublishing,           ObjectAlreadyRegistered,           ObjectClassNotDefined,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    // Allocate new ID.    if (nextObjectId > MAX_OBJECTID) {        D.Out(pdError, "RTIinternalError : nextObjectId = %d, MAX = %d.",              nextObjectId, MAX_OBJECTID);        throw RTIinternalError("Too many IDs requested.");    }    ObjectHandle new_id = nextObjectId ;    nextObjectId++ ;    D.Out(pdRegister,          "Federation %d: Federate %d registering Object %d of Class %d.",          handle, federate, new_id, class_handle);    // Register Object.    root->ObjectClasses->registerInstance(federate, class_handle, new_id,                                          object_name);    D.Out(pdDebug, "suite");    return new_id ;}// ----------------------------------------------------------------------------// removeFederate/*! 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            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 = m_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);}// ----------------------------------------------------------------------------//! Return 'IDCount' unique IDs, ranging from FirstID to LastID.voidFederation::requestId(ObjectHandlecount id_count,                      ObjectHandle &first_id,                      ObjectHandle &last_id)    throw (TooManyIDsRequested){    // BUG: Should note a security threat for this service.    if (nextObjectId + id_count - 1 > MAX_OBJECTID)        throw TooManyIDsRequested();    first_id = nextObjectId ;    last_id = nextObjectId + id_count - 1 ;    D.Out(pdInit, "Federation %d returns %d new IDs starting at %d.",          handle, id_count, first_id);    nextObjectId = last_id + 1 ;}// ----------------------------------------------------------------------------//! unregisterSynchronization.

⌨️ 快捷键说明

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