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

📄 interaction.cc

📁 分布式仿真 开放源码
💻 CC
📖 第 1 页 / 共 2 页
字号:
}// ----------------------------------------------------------------------------//! Returns the parameter handle obtained by its name.ParameterHandleInteraction::getParameterHandle(const char *the_name) const    throw (NameNotFound, RTIinternalError){    list<Parameter *>::const_iterator p ;    for (p = parameterSet.begin(); p != parameterSet.end(); p++) {        if (strcmp((*p)->getName(), the_name) == 0)            return (*p)->getHandle();    }    throw NameNotFound();}// ----------------------------------------------------------------------------//! Returns the parameter name obtained by its handle.const char *Interaction::getParameterName(ParameterHandle the_handle) const    throw (InteractionParameterNotDefined,           RTIinternalError){    return getParameterByHandle(the_handle)->getName();}// ----------------------------------------------------------------------------//! Return true if federate has subscribed to this attribute w/ regionboolInteraction::isSubscribed(FederateHandle fed, RegionImp *region){    list<Subscriber *>::iterator s ;    for (s = subscribers.begin(); s != subscribers.end(); ++s) {        if ((*s)->match(fed, region)) {	    return true ;        }    }    return false ;}// ----------------------------------------------------------------------------//! Return true if federate has subscribed to this attribute w/ default regionboolInteraction::isSubscribed(FederateHandle fed){    return isSubscribed(fed, 0);}// ----------------------------------------------------------------------------//! Return true if federate is publishing the attribute.boolInteraction::isPublishing(FederateHandle fed){    list<Publisher *>::iterator p ;    for (p = publishers.begin(); p != publishers.end(); ++p) {        if ((*p)->getHandle() == fed) {	    return true ;        }    }    return false ;}// ----------------------------------------------------------------------------/*! Check a SendInteractionOrder to see if it's OK for sending, but  without sending it(to be called on the RTIA only).*/voidInteraction::isReady(FederateHandle federate_handle,                     ParameterHandle *parameter_list,                     UShort list_size)    throw (FederateNotPublishing,           InteractionParameterNotDefined,           RTIinternalError){    // Is Federate Publishing Interaction?    if (!isPublishing(federate_handle))        throw FederateNotPublishing();    // Are Parameters Defined?    for (UShort i = 0 ; i < list_size ; i++)        getParameterByHandle(parameter_list[i]);}// ----------------------------------------------------------------------------//! killFederate.voidInteraction::killFederate(FederateHandle the_federate)    throw (){    try {        // Is federate publishing something ? (not important)        if (isPublishing(the_federate))            unpublish(the_federate);        // Does federate subscribed to something ?        if (isSubscribed(the_federate))            unsubscribe(the_federate);    }    catch (SecurityError &e) {}}// ----------------------------------------------------------------------------//! publishvoidInteraction::publish(FederateHandle the_handle)    throw (FederateNotPublishing, RTIinternalError, SecurityError){    checkFederateAccess(the_handle, (char *) "Publish");        if (!isPublishing(the_handle)) {	D.Out(pdInit,	      "Interaction %d: Added Federate %d to publishers list.",	      handle, the_handle);	publishers.push_front(new Publisher(the_handle));    }    else	D.Out(pdError,	      "Interaction %d: Inconsistent publish request from"	      " Federate %d.", handle, the_handle);}// ----------------------------------------------------------------------------//! publishvoidInteraction::unpublish(FederateHandle the_handle)    throw (FederateNotPublishing, RTIinternalError, SecurityError){    if (isPublishing(the_handle)) {	D.Out(pdTerm,	      "Interaction %d: Removed Federate %d from publishers list.",	      handle, the_handle);	deletePublisher(the_handle);    }    else {	throw FederateNotPublishing();    }}// ----------------------------------------------------------------------------/*! Called by RTIG in order to start the broadcasting of an Interaction  Message(to all federates who subscribed to this Interaction Class).*/InteractionBroadcastList *Interaction::sendInteraction(FederateHandle federate_handle,                             ParameterHandle *parameter_list,                             ParameterValue *value_list,                             UShort list_size,                             FederationTime time,                             const char *the_tag)    throw (FederateNotPublishing,           InteractionClassNotDefined,           InteractionParameterNotDefined,           RTIinternalError){    // Pre-conditions checking    if (!isPublishing(federate_handle))        throw FederateNotPublishing();    // Prepare and Broadcast message for this class    InteractionBroadcastList *ibList = NULL ;    if (server != NULL) {        NetworkMessage *answer = new NetworkMessage ;        answer->type = NetworkMessage::RECEIVE_INTERACTION ;        answer->exception = e_NO_EXCEPTION ;        answer->federation = server->federation();        answer->federate = federate_handle ;        answer->interactionClass = handle ; // Interaction Class Handle	answer->date = time ;        strcpy(answer->label, the_tag);        answer->handleArraySize = list_size ;        for (int i = 0 ; i < list_size ; i++) {            answer->handleArray[i] = parameter_list[i] ;            answer->setValue(i, value_list[i]);        }        D.Out(pdProtocol, "Preparing broadcast list.");        ibList = new InteractionBroadcastList(answer);        broadcastInteractionMessage(ibList);    }    else        // SendInteraction should not be called on the RTIA.        throw RTIinternalError("SendInteraction called by RTIA.");    // Return the BroadcastList in case it had to be passed to the    // parent class.    return ibList ;}// ----------------------------------------------------------------------------/*! Name attribute access(GetName reference must be considered READ-ONLY).  NewName length must be lower or equal to MAX_USER_TAG_LENGTH.*/const char *Interaction::getName() const{    return name.c_str();}// ----------------------------------------------------------------------------//! Change the interaction name.voidInteraction::setName(const char *new_name)    throw (ValueLengthExceeded, RTIinternalError){    name = new_name == 0 ? "" : new_name ;}// ----------------------------------------------------------------------------//! Change the level ID./*! A class' LevelID can only be increased. */voidInteraction::setLevelId(SecurityLevelID new_levelID){    if (server->dominates(new_levelID, id) == RTI_FALSE)        throw SecurityError("Attempt to lower interaction class level.");    id = new_levelID ;}// ----------------------------------------------------------------------------//! subscribevoidInteraction::subscribe(FederateHandle fed, RegionImp *region)    throw (FederateNotSubscribing, RTIinternalError, SecurityError){    checkFederateAccess(fed, "Subscribe");    if (!isSubscribed(fed, region)) {	subscribers.push_front(new Subscriber(fed, region));	D.Out(pdInit,	      "Parameter %d: Added Federate %d to subscribers list.",	      handle, fed);    }    else	D.Out(pdError,	      "Parameter %d: Unconsistent subscribe request from "	      "federate %d.", handle, fed);    }// ----------------------------------------------------------------------------//! subscribevoidInteraction::subscribe(FederateHandle fed)    throw (FederateNotSubscribing, RTIinternalError, SecurityError){    subscribe(fed, 0);}// ----------------------------------------------------------------------------//! unsubscribevoidInteraction::unsubscribe(FederateHandle fed, RegionImp *region)    throw (FederateNotSubscribing, RTIinternalError, SecurityError){    if (isSubscribed(fed)) {	deleteSubscriber(fed, region);	D.Out(pdTerm,	      "Parameter %d: Removed Federate %d from subscribers list.",	      handle, fed);    }    else	throw FederateNotSubscribing();}// ----------------------------------------------------------------------------//! unsubscribevoidInteraction::unsubscribe(FederateHandle fed)    throw (FederateNotSubscribing, RTIinternalError, SecurityError){    unsubscribe(fed, 0);}// ----------------------------------------------------------------------------// setSpacevoidInteraction::setSpace(SpaceHandle h){    space = h ;}// ----------------------------------------------------------------------------// getSpaceSpaceHandleInteraction::getSpace(){    return space ;}} // namespace certi// $Id: Interaction.cc,v 3.19 2004/03/04 20:19:05 breholee Exp $

⌨️ 快捷键说明

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