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

📄 mobilenode.cc~

📁 TCP westwood code, download
💻 CC~
📖 第 1 页 / 共 2 页
字号:
   Other class functions   ====================================================================== */voidMobileNode::dump(void){	Phy *n;	fprintf(stdout, "Index: %d\n", address_);	fprintf(stdout, "Network Interface List\n"); 	for(n = ifhead_.lh_first; n; n = n->nextnode() )		n->dump();		fprintf(stdout, "--------------------------------------------------\n");}/* ======================================================================   Position Functions   ====================================================================== */void MobileNode::start(){	Scheduler& s = Scheduler::instance();	if(random_motion_ == 0) {		log_movement();		return;	}	assert(initialized());	random_position();#ifdef DEBUG        fprintf(stderr, "%d - %s: calling random_destination()\n",                address_, __PRETTY_FUNCTION__);#endif	random_destination();	s.schedule(&pos_handle_, &pos_intr_, position_update_interval_);}void MobileNode::log_movement(){        if (!log_target_) 		return;	Scheduler& s = Scheduler::instance();	sprintf(log_target_->pt_->buffer(),		"M %.5f %d (%.2f, %.2f, %.2f), (%.2f, %.2f), %.2f",		s.clock(), address_, X_, Y_, Z_, destX_, destY_, speed_);	log_target_->pt_->dump();}voidMobileNode::log_energy(int flag){	if (!log_target_) 		return;	Scheduler &s = Scheduler::instance();	if (flag) {		sprintf(log_target_->pt_->buffer(),"N -t %f -n %d -e %f", s.clock(),			address_, energy_model_->energy()); 	} else {		sprintf(log_target_->pt_->buffer(),"N -t %f -n %d -e 0 ", s.clock(),			address_); 	}	log_target_->pt_->dump();}//void//MobileNode::logrttime(double t)//{//	last_rt_time_ = (int)t;//}voidMobileNode::bound_position(){	double minX;	double maxX;	double minY;	double maxY;	int recheck = 1;	assert(T_ != 0);	minX = T_->lowerX();	maxX = T_->upperX();	minY = T_->lowerY();	maxY = T_->upperY();	while (recheck) {		recheck = 0;		if (X_ < minX) {			X_ = minX + (minX - X_);			recheck = 1;		}		if (X_ > maxX) {			X_ = maxX - (X_ - maxX);			recheck = 1;		}		if (Y_ < minY) {			Y_ = minY + (minY - Y_);			recheck = 1;		}		if (Y_ > maxY) {			Y_ = maxY- (Y_ - maxY);			recheck = 1;		}		if (recheck) {			fprintf(stderr, "Adjust position of node %d\n",address_);		}	}}intMobileNode::set_destination(double x, double y, double s){	assert(initialized());	if(x >= T_->upperX() || x <= T_->lowerX())		return -1;	if(y >= T_->upperY() || y <= T_->lowerY())		return -1;		update_position();	// figure out where we are now		destX_ = x;	destY_ = y;	speed_ = s;		dX_ = destX_ - X_;	dY_ = destY_ - Y_;	dZ_ = 0.0;		// this isn't used, since flying isn't allowed	if (destX_ != X_ || destY_ != Y_) {		// normalize dx, dy to unit len		double len = sqrt( (dX_ * dX_) + (dY_ * dY_) );		dX_ /= len;		dY_ /= len;	}  	position_update_time_ = Scheduler::instance().clock();#ifdef DEBUG	fprintf(stderr, "%d - %s: calling log_movement()\n", 		address_, __FUNCTION__);#endif	log_movement();	/* update gridkeeper */	if (GridKeeper::instance()){		GridKeeper* gp =  GridKeeper::instance();		gp-> new_moves(this);	}                     	if (namChan_ != 0) {		sprintf(nwrk_,     			"n -t %f -s %d -x %f -y %f -u %f -v %f -T %f",			Scheduler::instance().clock(),			nodeid_,			X_, Y_,			speed_ * dX_, speed_ * dY_,			((speed_*dX_) != 0) ? 				(destX_-X_)/(speed_*dX_) : speed_*dX_			);   		namdump();         	}	return 0;}void MobileNode::update_position(){	double now = Scheduler::instance().clock();	double interval = now - position_update_time_;	if (interval == 0.0)		return;	X_ += dX_ * (speed_ * interval);	Y_ += dY_ * (speed_ * interval);	if ((dX_ > 0 && X_ > destX_) || (dX_ < 0 && X_ < destX_))	  X_ = destX_;		// correct overshoot (slow? XXX)	if ((dY_ > 0 && Y_ > destY_) || (dY_ < 0 && Y_ < destY_))	  Y_ = destY_;		// correct overshoot (slow? XXX)	bound_position();	Z_ = T_->height(X_, Y_);#if 0	fprintf(stderr, "Node: %d, X: %6.2f, Y: %6.2f, Z: %6.2f, time: %f\n",		address_, X_, Y_, Z_, now);#endif	position_update_time_ = now;}voidMobileNode::random_position(){	if (T_ == 0) {		fprintf(stderr, "No TOPOLOGY assigned\n");		exit(1);	}	X_ = Random::uniform() * T_->upperX();	Y_ = Random::uniform() * T_->upperY();	Z_ = T_->height(X_, Y_);	position_update_time_ = 0.0;}voidMobileNode::random_destination(){	if (T_ == 0) {		fprintf(stderr, "No TOPOLOGY assigned\n");		exit(1);	}	random_speed();#ifdef DEBUG        fprintf(stderr, "%d - %s: calling set_destination()\n",                address_, __FUNCTION__);#endif	(void) set_destination(Random::uniform() * T_->upperX(),                               Random::uniform() * T_->upperY(),                               speed_);}voidMobileNode::random_direction(){	/* this code isn't used anymore -dam 1/22/98 */	double len;	dX_ = (double) Random::random();	dY_ = (double) Random::random();	len = sqrt( (dX_ * dX_) + (dY_ * dY_) );	dX_ /= len;	dY_ /= len;	dZ_ = 0.0;				// we're not flying...	/*	 * Determine the sign of each component of the	 * direction vector.	 */	if (X_ > (T_->upperX() - 2*T_->resol())) {		if (dX_ > 0) 			dX_ = -dX_;	} else if (X_ < (T_->lowerX() + 2*T_->resol())) {		if (dX_ < 0) 			dX_ = -dX_;	} else if (Random::uniform() <= 0.5) {		dX_ = -dX_;	}	if (Y_ > (T_->upperY() - 2*T_->resol())) {		if (dY_ > 0) 			dY_ = -dY_;	} else if (Y_ < (T_->lowerY() + 2*T_->resol())) {		if (dY_ < 0) 			dY_ = -dY_;	} else if(Random::uniform() <= 0.5) {		dY_ = -dY_;	}#if 0	fprintf(stderr, "Location: (%f, %f), Direction: (%f, %f)\n",		X_, Y_, dX_, dY_);#endif}voidMobileNode::random_speed(){	speed_ = Random::uniform() * MAX_SPEED;}doubleMobileNode::distance(MobileNode *m){	update_position();		// update my position	m->update_position();		// update m's position        double Xpos = (X_ - m->X_) * (X_ - m->X_);        double Ypos = (Y_ - m->Y_) * (Y_ - m->Y_);	double Zpos = (Z_ - m->Z_) * (Z_ - m->Z_);        return sqrt(Xpos + Ypos + Zpos);}doubleMobileNode::propdelay(MobileNode *m){	return distance(m) / SPEED_OF_LIGHT;}void MobileNode::idle_energy_patch(float /*total*/, float /*P_idle*/){}

⌨️ 快捷键说明

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