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

📄 federationslist.cc

📁 分布式仿真 开放源码
💻 CC
📖 第 1 页 / 共 3 页
字号:
// ----------------------------------------------------------------------------// CERTI - HLA RunTime Infrastructure// Copyright (C) 2002, 2003, 2004  ONERA//// This file is part of CERTI//// CERTI is free software ; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation ; either version 2 of the License, or// (at your option) any later version.//// CERTI is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY ; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program ; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//// $Id: FederationsList.cc,v 3.23 2004/01/09 16:29:50 breholee Exp $// ----------------------------------------------------------------------------#include <config.h>#include "FederationsList.hh"using std::list ;using std::endl ;namespace certi {namespace rtig {static pdCDebug D("FEDERATIONSLIST", "(ListFede) - ");// ----------------------------------------------------------------------------// ConstructorFederationsList::FederationsList(SocketServer *server, AuditFile *audit)    : list<Federation *>(){    if (server == NULL)        throw RTIinternalError("FederationsList: No SocketServer was given.");    if (audit == NULL)        throw RTIinternalError("FederationsList: No AuditServer was given.");    socketServer = server ;    auditFile = audit ;    verbose = false ;}// ----------------------------------------------------------------------------// DestructorFederationsList::~FederationsList(){    if (!empty())        D.Out(pdError, "ListeFederation not empty at destruction time.");    for (list<Federation *>::iterator i = begin(); i != end(); i++) {        delete(*i);    }    clear();}// ----------------------------------------------------------------------------//! Adds a constrained federate to federation.voidFederationsList::addConstrained(Handle handle,                                FederateHandle federate)    throw (FederationExecutionDoesNotExist,           FederateNotExecutionMember,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    Federation *federation = NULL ;    // It may throw RTIinternalError.    checkHandle(handle);    checkHandle(federate);    // It may throw FederationExecutionDoesNotExist.    searchFederation(handle, federation);    // It may throw a bunch of exceptions.    federation->addConstrained(federate);}// ----------------------------------------------------------------------------/*! Creates a new Federate if its name is unique, and returns its new  Federate Handle. Also sends Null messages from all other federates  to initialize its LBTS, and finally a RequestPause message if the  Federation is already paused.*/FederateHandleFederationsList::addFederate(Handle handle,                             const char *name,                             SocketTCP *tcp_link)    throw (FederationExecutionDoesNotExist,           FederateAlreadyExecutionMember,           MemoryExhausted,           RTIinternalError){    // It may throw RTIinternalError    checkHandle(handle);    // It may throw FederationExecutionDoesNotExist    Federation *federation = NULL ;    searchFederation(handle, federation);    // It may raise a bunch of exceptions    FederateHandle federate = federation->add(name, tcp_link);    return federate ;}// ----------------------------------------------------------------------------// searchFederationintFederationsList::searchFederation(Handle handle,                                  Federation* &federation)    throw (FederationExecutionDoesNotExist, RTIinternalError){    federation = NULL ;    // It may raise RTIinternalError    checkHandle(handle);    list<Federation *>::const_iterator i = begin();    for (int j = 1 ; i != end(); i++, j++) {        if ((*i)->getHandle() == handle) {            federation = (*i);            return j ;        }    }    D.Out(pdExcept, "Unknown Federation Handle %d.", handle);    throw FederationExecutionDoesNotExist("Bad Federation Handle.");}// ----------------------------------------------------------------------------// createFederation#ifdef FEDERATION_USES_MULTICASTvoid FederationsList::createFederation(const char *name,                                       Handle handle,                                       SocketMC *mc_link)#else    void FederationsList::createFederation(const char *name,                                           Handle handle)#endif    throw (FederationExecutionAlreadyExists,           CouldNotOpenRID,           ErrorReadingRID,           MemoryExhausted,           SecurityError,           RTIinternalError){    Federation *federation = NULL ;    Handle unused ;    // It may throw RTIinternalError    checkHandle(handle);    auditFile->addToLinef(", Handle : %hu", handle);    if (name == NULL) throw RTIinternalError("Invalid Federation Name.");    // It should throw FederationExecutionDoesNotExist.    try {        exists(name, unused);        D.Out(pdExcept, "Federation %s already present.", name);        throw FederationExecutionAlreadyExists();    }    catch (FederationExecutionDoesNotExist &e) {        D.Out(pdDebug,              "CreerFederation catches FederationExecutionDoesNotExist.");    }    if (size() >= MAX_FEDERATION)        throw RTIinternalError("Too many federation executions.");#ifdef FEDERATION_USES_MULTICAST    federation = new Federation(name, handle, socketServer, auditFile, mc_link);#else    federation = new Federation(name, handle, socketServer, auditFile);#endif    if (federation == NULL)        throw MemoryExhausted("No memory left for new Federation.");    push_front(federation);    D.Out(pdInit, "New Federation created with Handle %d.", handle);}// ----------------------------------------------------------------------------// createRegulatorvoidFederationsList::createRegulator(Handle handle,                                 FederateHandle federate,                                 FederationTime time)    throw (FederationExecutionDoesNotExist,           FederateNotExecutionMember,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    Federation *federation = NULL ;    // It may throw RTIinternalError.    checkHandle(handle);    checkHandle(federate);    // It may throw FederationExecutionDoesNotExist.    searchFederation(handle, federation);    // It may throw a bunch of exceptions.    federation->addRegulator(federate, time);}// ----------------------------------------------------------------------------// destroyObjectvoidFederationsList::destroyObject(Handle handle,                               FederateHandle federate,                               ObjectHandle id,                               const char *tag)    throw (FederateNotExecutionMember,           FederationExecutionDoesNotExist,           DeletePrivilegeNotHeld,           ObjectNotKnown,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    Federation *federation = NULL ;    // It may throw RTIinternalError.    checkHandle(handle);    checkHandle(federate);    // It may throw FederationExecutionDoesNotExist.    searchFederation(handle, federation);    federation->deleteObject(federate, id, tag);}// ----------------------------------------------------------------------------/*! Return the Handle of the Federation named "name" if it is found in the  FederationList, else throw FederationExecutionDoesNotExist.*/voidFederationsList::exists(const char *name,                        Handle &handle)    throw (FederationExecutionDoesNotExist, RTIinternalError){    if (name == NULL) throw RTIinternalError("Null Federation Name.");    for (list<Federation *>::iterator i = begin(); i != end(); i++) {        if (!strcmp((*i)->getName(), name)) {            handle = (*i)->getHandle();            return ;        }    }    D.Out(pdDebug, "EstPresent throws FederationExecutionDoesNotExist.");    throw FederationExecutionDoesNotExist();}// ----------------------------------------------------------------------------// info#ifdef FEDERATION_USES_MULTICASTvoid FederationsList::info(Handle handle,                           int &nb_federates,                           int &nb_regulators,                           bool &is_syncing,                           SocketMC* &comm_mc)#else    void FederationsList::info(Handle handle,                               int &nb_federates,                               int &nb_regulators,                               bool &is_syncing)#endif    throw (FederationExecutionDoesNotExist, RTIinternalError){    Federation *federation ;    // It may raise RTIinternalError    checkHandle(handle);    // It may throw FederationExecutionNotFound    searchFederation(handle, federation);    nb_federates = federation->getNbFederates();    nb_regulators = federation->getNbRegulators();    is_syncing = federation->isSynchronizing();#ifdef FEDERATION_USES_MULTICAST    comm_mc = federation->MCLink ;#endif}// ----------------------------------------------------------------------------// registerObjectObjectHandleFederationsList::registerObject(Handle handle,                                FederateHandle federate,                                ObjectClassHandle object_class,                                ObjectName name)    throw (FederateNotExecutionMember,           FederateNotPublishing,           ObjectAlreadyRegistered,           ObjectClassNotDefined,           ObjectClassNotPublished,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    Federation *federation = NULL ;    // It may throw RTIinternalError.    checkHandle(handle);    checkHandle(federate);    D.Out(pdTrace, "handle = %d, federate = %d.", handle, federate);    // It may throw FederationExecutionDoesNotExist.    searchFederation(handle, federation);    D.Out(pdTrace, "theObjectClass = %d, name = %s.", object_class, name);    return(federation->registerObject(federate, object_class, name));}// ----------------------------------------------------------------------------// checkHandle/*! handle can be any type of handle, not only a Federation handle.  Throw an exception if Handle is not correct(too low or too big)*/voidFederationsList::checkHandle(Handle handle)    throw (RTIinternalError){    if (handle <= 0) {        D.Out(pdExcept, "Illegal Handle %d.", handle);        throw RTIinternalError("Negative or null Handle.");    }}// ----------------------------------------------------------------------------// updateRegulatorvoidFederationsList::updateRegulator(Handle handle,                                 FederateHandle federate,                                 FederationTime time)    throw (FederationExecutionDoesNotExist,           FederateNotExecutionMember,           RTIinternalError){    Federation *federation = NULL ;    // It may throw RTIinternalError.    checkHandle(handle);    checkHandle(federate);    // It may throw FederationExecutionDoesNotExist.    searchFederation(handle, federation);    federation->updateRegulator(federate, time);}// ----------------------------------------------------------------------------// updateAttributevoidFederationsList::updateAttribute(Handle handle,                                 FederateHandle federate,                                 ObjectHandle id,                                 AttributeHandle *attributes,                                 AttributeValue *values,                                 UShort list_size,                                 FederationTime time,                                 const char *tag)    throw (FederateNotExecutionMember,           FederationExecutionDoesNotExist,           ObjectNotKnown,           AttributeNotDefined,           AttributeNotOwned,           SaveInProgress,           RestoreInProgress,           RTIinternalError){    Federation *federation = NULL ;    // It may throw RTIinternalError.    checkHandle(handle);    checkHandle(federate);    // It may throw FederationExecutionDoesNotExist.    searchFederation(handle, federation);    federation->updateAttributeValues(federate, id, attributes, values,                                      list_size, time, tag);}// ----------------------------------------------------------------------------// updateParametervoidFederationsList::updateParameter(Handle handle,                                 FederateHandle federate,                                 InteractionClassHandle interaction,                                 ParameterHandle *parameters,                                 ParameterValue *values,                                 UShort list_size,                                 FederationTime time,                                 const char *tag)    throw (FederateNotExecutionMember,           FederateNotPublishing,           FederationExecutionDoesNotExist,           InteractionClassNotDefined,           InteractionParameterNotDefined,           SaveInProgress,           RestoreInProgress,

⌨️ 快捷键说明

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