VariableLengthData RegionHandle::encode() const { return VariableLengthData( (void*)&this->_impl->value, 4 ); }
void Hla::connect( ) { try { auto_ptr<RTIambassadorFactory> rtiAmbassadorFactory(new RTIambassadorFactory()); rtiAmbassador_ = rtiAmbassadorFactory->createRTIambassador(); } catch (RTIambassadorFactory* e) { wcerr << "create error" << endl; wcerr.flush(); return; } wstring localSettingDesignator_; localSettingDesignator_=L"crcAddress="+crcAddress_; wcout<< localSettingDesignator_ <<endl; try { rtiAmbassador_->connect(*this, HLA_IMMEDIATE, localSettingDesignator_); } catch(exceptions &e ) { wceer<< e <<endl; wceer.flush(); return; } vector<string> FOMmoduleUrls_; FOMmoduleUrls_.push_back(fomName_); //创建联邦执行,一个就够了。 rtiAmbassador_->creatFederationExecution(fedExeName_,FOMmoduleUrls_); FederateHandle federateHandle = rtiAmbassador_->joinFederationExecution(fedName_, fedExeName_, FOMmoduleUrls_); try { rtiAmbassador_->registerFederationSynchronizationPonit(syncPoint, VariableLengthData()); pthread_mutex_lock(& mutex_); while (isAnnounced_ == false) { pthread_cond_wait(&threshold_cv_, &mutex_); } pthread_mutex_unlock(&mutex_); wcout<< "register synchronization point succeed" <<endl; } catch(Exception &e ) { wcout<< "register synchronization point failed"<<endl; } getchar( );//完成同步,手动触发前进。 try { rtiAmbassador_->synchronizationPointAchieved(syncPoint); wcout<< L"Achieved sync point" <<endl; pthread_mutex_lock(&mutex_); while(!readyToRun) { pthread_cond_wait(&threshold_cv_, &mutex_); } pthread_mutex_unlock(&mutex_); wcout<< L"Achieve syncPoint succeed" <<endl; }catch(Exception &e ) { wcout<< "Achieve syncPoint error" <<endl; } HLAfloat64Interval *interval_ = new HLAfloat64Interval(1);//前瞻量 //申请时间控制 rtiAmbassador_->enableTimeRegulation(*interval_); pthread_cond_lock(&mutex_); while(timeRegulationEnable_) { pthread_cond_wait(&threshold_cv_, &mutex_); } pthread_cond_unlock(&mutex_); wcout<< L"timeRegulationSuccess" <<endl; //申请时间受限 rtiAmbassador_->enableTimeConstrained(); pthread_cond_lock(&mutex_); while(timeConstrainedEnable_) { pthread_cond_wait(&threshold_cv_, &mutex_); } pthread_cond_unlock(&mutex_); wcout<< L"timeConstrainedSuccess" <<endl; }
VariableLengthData MessageRetractionHandle::encode() const { return VariableLengthData( (void*)&this->_impl->value, 4 ); }
VariableLengthData ObjectInstanceHandle::encode() const { return VariableLengthData( (void*)this->_impl->value, 4 ); }
VariableLengthData ParameterHandle::encode() const { return VariableLengthData( (void*)this->_impl->value, 4 ); }
// Generates an encoded value that can be used to send // LogicalTimeIntervals to other federates in updates or interactions VariableLengthData HLAinteger64Interval::encode() const { // TODO fill me out return VariableLengthData(); }
// Encode this element into a new VariableLengthData VariableLengthData HLAASCIIchar::encode() const throw( EncoderException ) { char value = this->get(); return VariableLengthData( &value, BitHelpers::LENGTH_CHAR ); }