federationmanagement.cc

来自「分布式仿真 开放源码」· CC 代码 · 共 646 行 · 第 1/2 页

CC
646
字号
                                                TypeException &e){    D.Out(pdProtocol, "unregisterSynchronization.");    assert(label != NULL);    e = e_NO_EXCEPTION ;    // Find if this label has been requested by federate or RTIG.    list<char *>::iterator i = synchronizationLabels.begin();    bool exists = false ;    for (; i != synchronizationLabels.end(); i++) {        if (!strcmp((*i), label)) {            // Label already pending.            exists = true ;            break ;        }    }    if (!exists)        e = e_UnknownLabel ;    else {	delete[] *i ;	synchronizationLabels.erase(i);    }        if (!_est_membre_federation)        e = e_FederateNotExecutionMember ;    if (e == e_NO_EXCEPTION) {        NetworkMessage req ;        req.type = NetworkMessage::SYNCHRONIZATION_POINT_ACHIEVED ;        req.federation = _numero_federation ;        req.federate = federate ;        req.setLabel(label);        comm->sendMessage(&req);    }}// ----------------------------------------------------------------------------voidFederationManagement::announceSynchronizationPoint(const char *label,                                                   const char *tag){    D.Out(pdInit, "Announce Synchronization Point \"%s\"(%s).", label, tag);    Message req, rep ;    assert(label != NULL);    req.type = Message::ANNOUNCE_SYNCHRONIZATION_POINT ;    req.setLabel(label);    req.setTag(tag);    // adding label to list of synchronizations to be done.    list<char *>::const_iterator i = synchronizationLabels.begin();    bool exists = false ;    for (; i != synchronizationLabels.end(); i++) {        if (!strcmp((*i), label)) {            // label exists (only if initiator).            exists = true ;            break ;        }    }    if (!exists)        synchronizationLabels.push_back(strdup(label));    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------void FederationManagement::synchronizationPointRegistrationSucceeded(const char *label){    D.Out(pdInit, "Synchronization Point Registration Succeeded \"%s\".",          label);    Message req, rep ;    assert(label != NULL);    req.type = Message::SYNCHRONIZATION_POINT_REGISTRATION_SUCCEEDED ;    req.setLabel(label);    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::federationSynchronized(const char *label){    D.Out(pdInit, "Federation Synchronized \"%s\".", label);    Message req, rep ;    assert(label != NULL);    req.type = Message::FEDERATION_SYNCHRONIZED ;    req.setLabel(label);    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::requestFederationSave(const char *label,                                            FederationTime the_time,                                            TypeException &){    D.Out(pdInit, "Request for federation save \"%s\".", label);    assert(label != 0);    NetworkMessage req ;    req.type = NetworkMessage::REQUEST_FEDERATION_SAVE ;    req.date = the_time ;    req.setLabel(label);    comm->sendMessage(&req);    // Should make sure that RTIG don't have any save or restore recently set.    // NetworkMessage rep ;    // comm->waitMessage(&rep, NetworkMessage::REQUEST_FEDERATION_SAVE, federate);    // e = rep.exception ;}// ----------------------------------------------------------------------------voidFederationManagement::federateSaveBegun(TypeException &){    D.Out(pdInit, "Beginning federate save.");    if (!savingState)        throw SaveNotInitiated("Federation did not initiate saving.");    NetworkMessage req ;    req.type = NetworkMessage::FEDERATE_SAVE_BEGUN ;    comm->sendMessage(&req);}// ----------------------------------------------------------------------------voidFederationManagement::federateSaveStatus(bool status, TypeException &){    D.Out(pdInit, "Federate %ssaved.", status ? "" : "not ");    if (!savingState)        throw SaveNotInitiated("Federation did not initiate saving.");    NetworkMessage req ;    req.type = status ? NetworkMessage::FEDERATE_SAVE_COMPLETE : NetworkMessage::FEDERATE_SAVE_NOT_COMPLETE ;    comm->sendMessage(&req);}// ----------------------------------------------------------------------------voidFederationManagement::initiateFederateSave(const char *label){    D.Out(pdInit, "Initiate a federate save \"%s\".", label);    savingState = true ;    Message req, rep ;    assert(label != 0);    req.type = Message::INITIATE_FEDERATE_SAVE ;    req.setLabel(label);    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::federationSavedStatus(bool status){    D.Out(pdInit, "Federation %ssaved.", status ? "" : "not ");    savingState = false ;    Message req, rep ;    req.type = status ? Message::FEDERATION_SAVED : Message::FEDERATION_NOT_SAVED ;    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::requestFederationRestore(const char *label,                                               TypeException &){    D.Out(pdInit, "Request for federation restore \"%s\".", label);    assert(label != NULL);    NetworkMessage req ;    req.type = NetworkMessage::REQUEST_FEDERATION_RESTORE ;    req.setLabel(label);    comm->sendMessage(&req);    // Should make sure that RTIG don't have any save or restore recently set.    // ...}// ----------------------------------------------------------------------------voidFederationManagement::federateRestoreStatus(bool status, TypeException &){    D.Out(pdInit, "Federate %srestored.", status ? "" : "not ");    if (!restoringState)        throw RestoreNotRequested("Federation did not initiate restoring.");    NetworkMessage req ;    if (status)        req.type = NetworkMessage::FEDERATE_RESTORE_COMPLETE ;    else        req.type = NetworkMessage::FEDERATE_RESTORE_NOT_COMPLETE ;    comm->sendMessage(&req);}// ----------------------------------------------------------------------------voidFederationManagement::requestFederationRestoreStatus(bool status,                                                     const char *label,                                                     const char *reason){    D.Out(pdInit, "Federation restore request %saccepted",          status ? "" : "not ");    Message req, rep ;    req.setLabel(label);    if (status)        req.type = Message::REQUEST_FEDERATION_RESTORE_SUCCEEDED ;    else {        req.type = Message::REQUEST_FEDERATION_RESTORE_FAILED ;        req.setTag(reason);    }    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::federationRestoreBegun(){    D.Out(pdInit, "Federation restore begun");    Message req, rep ;    req.type = Message::FEDERATION_RESTORE_BEGUN ;    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::initiateFederateRestore(const char *label,                                              FederateHandle handle){    D.Out(pdInit, "Initiate federate restore \"%s\" with federate handle %d.",          label, handle);    restoringState = true ;    Message req, rep ;    req.type = Message::INITIATE_FEDERATE_RESTORE ;    req.setFederate(handle);    req.setLabel(label);    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::federationRestoredStatus(bool status){    D.Out(pdInit, "Federation %srestored.", status ? "" : "not ");    restoringState = false ;    Message req, rep ;    if (status)        req.type = Message::FEDERATION_RESTORED ;    else        req.type = Message::FEDERATION_NOT_RESTORED ;    comm->requestFederateService(&req, &rep);}// ----------------------------------------------------------------------------voidFederationManagement::checkFederationSaving()    throw (SaveInProgress){    if (savingState) {        throw SaveInProgress("Federation is in saving state");    }}// ----------------------------------------------------------------------------voidFederationManagement::checkFederationRestoring()    throw (RestoreInProgress){    if (restoringState) {        throw RestoreInProgress("Federation is in restoring state");    }}}} // namespace certi/rtia// $Id: FederationManagement.cc,v 3.14 2004/03/04 20:19:04 breholee Exp $

⌨️ 快捷键说明

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