Esempio n. 1
0
VariableLengthData RegionHandle::encode() const
{
	return VariableLengthData( (void*)&this->_impl->value, 4 );
}
Esempio n. 2
0
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();
}
Esempio n. 7
0
// Encode this element into a new VariableLengthData
VariableLengthData HLAASCIIchar::encode() const
	throw( EncoderException )
{
    char value = this->get();
	return VariableLengthData( &value, BitHelpers::LENGTH_CHAR );
}