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 + -
显示快捷键?