亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? leachapp.cc

?? 無線傳感器網絡中,基于ns2仿真平臺,mannasim的源代碼,研究ns2必不可少的
?? CC
?? 第 1 頁 / 共 2 頁
字號:
#include "leachApp.h"#include <random.h>#include <mannasim/battery.h>#include <mannasim/leach/rca/rcagent.h>/** TCL **************************************/static class LeachAppClass : public TclClass{        public:                LeachAppClass() : TclClass("Application/SensorBaseApp/CommonNodeApp/LeachApp") {}                 // Create a TCL Object (parameters starts in 4)                TclObject * create(int argc, const char * const * argv)                {			if (argc != 7)			{				fprintf(stderr,					"Incorrect sintax:\n"					"  new LeachApp <nNodes> <nClusters> <maxDist>");			}                        return new LeachApp(                                atoi(argv[4]),                                atoi(argv[5]),				atof(argv[6]));                }} leach_app_object; /*********************************************/LeachApp::LeachApp(int nNodes, int nClusters, double maxDist) : CommonNodeApp() // : SensorBaseApp(){	mac_			 = NULL;	agent_                   = NULL;	isCH_                    = 0;	hasBeenCH_               = false;	nextChangeTime_          = 0;	round_                   = 0;	dist_                    = 0;	code_                    = 0;	now_                     = 0;	endFrmTime_              = 0;	beginIdle_               = 0;	beginSleep_              = 0;	/* Although constructing here, can't determine	 * sensedData's nodeid, because while constructing	 * the sensed_node_ is not yet defined.	 */	sensedData_              = new SensedData();	eventHandler_            = new LeachEventHandler(this);	config_.numberNodes_     = nNodes;	config_.desiredClusters_ = nClusters;	config_.maxDist_         = bsDist_ = maxDist;	initializeConfig();	frameTime_               = config_.ssSlotTime_ * config_.numberNodes_;	lstRndDelay_             = 0;	listenADV_               = true;	listenJOINREQ_           = false;}/* Initialize LEACH's configuration. */void LeachApp::initializeConfig(){	#define HDR_SIZE 25		// Originalmente era 25	config_.changeTimeIncrement_ = 10 * INITIAL_ENERGY;	config_.rndAdvDelay_         = TxTime(HDR_SIZE + 4); 	config_.ra_advTotal_         = 1 + config_.rndAdvDelay_ * (config_.desiredClusters_ * 4 + 1);	config_.ra_join_             = 0.01 * config_.numberNodes_;	config_.ra_delay_            = TxTime(HDR_SIZE + 4);	config_.spreading_           = config_.desiredClusters_ + 1;	config_.sigSize_             = 500; 	config_.ssSlotTime_          = TxTime(config_.sigSize_ + HDR_SIZE) * config_.spreading_;	config_.bsCode_              = 0;	#undef HDR_SIZE}LeachApp::~LeachApp(){	if (sensedData_ != NULL)		delete sensedData_;	delete eventHandler_;}void LeachApp::start(){	if (agent_ == NULL)	{		char agentName[32];		printf("Warning! LeachApp::start() => agent_ of %d is null! Creating a RCAgent!\n", sensor_node_->nodeid());		sprintf(agentName, "__rcagent%d", sensor_node_->nodeid());		agent_ = new RCAgent();		agent_->name(agentName);		Tcl::instance().enter(agent_);		printf("%s attach %s", name(), agent_->name());		Tcl::instance().evalf("%s attach %s", name(), agent_->name());	}	sensedData_->node_id() == sensor_node_->nodeid();	mac_ = (MacSensor *) ((RCAgent *) agent_)->getMAC();	mac_->node_num() = sensor_node_->nodeid();	decideClusterHead();	CommonNodeApp::start();}void LeachApp::goToSleep(){	((Battery *) sensor_node_->energy_model())->sleep();}void LeachApp::wakeUp(){	((Battery *) sensor_node_->energy_model())->wakeUp();}void LeachApp::setCode(int code){	printf("%d is setting code to %d\n", sensor_node_->nodeid(), code);	code_        = code;	mac_->code() = code;}void LeachApp::setClusterHead(){	isCH_      = true;	hasBeenCH_ = true;	/* "... when a node decides to become a cluster-head,	 * it chooses randomly from a list of spreading codes."	 */}void LeachApp::unsetClusterHead(){	isCH_      = false;}/*** Distributed cluster set-up functions *****************/void LeachApp::decideClusterHead(){	int totRounds;	setCode(0);	wakeUp();	CHHeard_  = false;	// CheckIsAlive???	totRounds = config_.numberNodes_ / config_.desiredClusters_;	if (round_ >= totRounds)		round_ = 0;		if (round_ == 0)		setHasNotBeenClusterHead();	if (Random::uniform(0, 1) < calculatePi())	{		printf("Node %d is a cluster head at time %lf\n", sensor_node_->nodeid(), Scheduler::instance().clock());		setClusterHead();		Scheduler::instance().schedule(			eventHandler_,			new LeachEvent(&LeachApp::advertiseClusterHead),			config_.rndAdvDelay_);	}	else	{		unsetClusterHead();		listenADV_ = true;		clearClusterChoices();	}	round_++;	nextChangeTime_ = Scheduler::instance().clock() + config_.changeTimeIncrement_;	Scheduler::instance().schedule(		eventHandler_,		new LeachEvent(&LeachApp::decideClusterHead),//		nextChangeTime_);		config_.changeTimeIncrement_);	Scheduler::instance().schedule(		eventHandler_,		new LeachEvent(&LeachApp::findBestCluster),		config_.ra_advTotal_);}double LeachApp::calculatePi(){	/*	 * Pi(t) = k / (N - k mod(r,N/k))	 * where k is the expected number of clusters per round	 * N is the total number of sensor nodes in the network	 * and r is the number of rounds that have already passed.	 */	register int n = config_.numberNodes_;	register int k = config_.desiredClusters_;	double thresh;	if (hasBeenClusterHead())		thresh = 0;	else if (n - k * round_ < 1)		thresh = 1;	else		thresh = (double) k / (n - k * round_);	return thresh;}void LeachApp::advertiseClusterHead(){	int clusterCode;	int numCodesAvail;	numCodesAvail = 2 * config_.spreading_ - 1;		currentCH_ = sensor_node_->nodeid();	currentCHMAC_ = MAC_BROADCAST;	clusterCode = (mac_->myADVnum() % numCodesAvail) + 1;	setCode(clusterCode);	wakeUp();	send(		MAC_BROADCAST,		LINK_BROADCAST,		LEACH_ADV_CH,//		(char *) (&currentCH_),		(char *) (&code_),//		(char *) (&mac_->myADVnum()),		sizeof(currentCH_),		BYTES_ID,		config_.maxDist_,		0);	listenJOINREQ_ = true;	clusterNodes_.clear();}void LeachApp::findBestCluster(){//	int numCodesAvail, clusterCode;//	numCodesAvail = 2 * config_.spreading_ - 1;	if (isClusterHead())	{		// If node is CH, determine code and create a TDMA schedule.		dist_      = config_.maxDist_;		currentCH_ = sensor_node_->nodeid();		currentCHMAC_ = MAC_BROADCAST;//		myADVnum_  = mac_->myADVnum();		/* There are opt(spreading) - 1 codes available b/c need 1 code		 * for communication with the base station.		 *///		clusterCode   = (myADVnum_ % numCodesAvail) + 1;		Scheduler::instance().schedule(			eventHandler_,			new LeachEvent(&LeachApp::createSchedule),			config_.ra_advTotal_ + config_.ra_join_);	}	else	{		int clusterCode;		/* If node is not a CH, find the CH which allows minimum transmit		 * power for communication.  Set the code and "distance" parameters		 * accordingly.		 */		if (clusterChoices_.empty())		{			printf("Warning! No Cluster Head ADVs were heard by %d\n", sensor_node_->nodeid());			currentCH_ = -1;	// VER ISSO *****			currentCHMAC_ = MAC_BROADCAST;			sendMyDataToBS();			return;		}		double min_dist = config_.maxDist_ + 1;		int ind = 0;		for (CHs::iterator it = clusterChoices_.begin(); it != clusterChoices_.end(); it++, ind++)		{			chadv element = (chadv) *it;			if (element.distance < min_dist)			{				min_dist    = element.distance;				currentCH_  = element.nodeid;				currentCHMAC_ = element.mac;//				clusterCode = (ind % numCodesAvail) + 1;				clusterCode = element.code;			}		}		dist_ = min_dist;		printf("%d has choosen %d as cluster head (mac = %d)\n", sensor_node_->nodeid(), currentCH_, currentCHMAC_);		Scheduler::instance().schedule(			eventHandler_,			new LeachEvent(&LeachApp::informClusterHead),			config_.ra_advTotal_ + Random::uniform(0, config_.ra_join_ - config_.ra_delay_));;		goToSleep();			setCode(clusterCode);				printf("Current cluster-head of %d is %d, which code is %d, at distance is %lf\n",			sensor_node_->nodeid(),			currentCH_,			clusterCode,			dist_);	}	listenADV_ = false;	clearClusterChoices();}void LeachApp::informClusterHead(){	int dataSize;	int nodeId;	printf("%d sending JOIN_REQ to %d, distance = %lf , at time %lf\n",		sensor_node_->nodeid(),		currentCH_,		dist_,		Scheduler::instance().clock());	dataSize = config_.spreading_ * BYTES_ID;	nodeId   = sensor_node_->nodeid();	send(//		MAC_BROADCAST,		currentCHMAC_,		currentCH_,		LEACH_JOIN_REQ,		(char *) (&nodeId),		sizeof(int),		dataSize,		config_.maxDist_,		// Using maxDist_, the CH can discover node's distance//		dist_,		code_);}void LeachApp::createSchedule(){	if (clusterNodes_.empty())	{		printf("Warning! There are no nodes in cluster %d\n",			sensor_node_->nodeid());		sendMyDataToBS();	}	else	{		int * msg;		int i = 0;		int dataSize;		msg = new int[clusterNodes_.size()];		printf("%d sending TDMA schedule (ADV_SCH): ", sensor_node_->nodeid());		for (CNs::iterator it = clusterNodes_.begin(); it != clusterNodes_.end(); it++)		{			msg[i++] = (int) *it;			printf("%d ", (int) *it);		}		printf("at time %lf\n", Scheduler::instance().clock());		dataSize = config_.spreading_ * sizeof(int) * clusterNodes_.size();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人久久久久久午夜久久久久| fc2成人免费人成在线观看播放| 精品在线你懂的| 94-欧美-setu| 2020国产成人综合网| 亚洲国产精品一区二区久久 | 欧美美女一区二区在线观看| 久久亚洲春色中文字幕久久久| 一区二区成人在线观看| 国产成a人无v码亚洲福利| 欧美一级专区免费大片| 亚洲精品中文在线观看| 国产精品亚洲专一区二区三区| 欧美人xxxx| 亚洲色图都市小说| 国产一二精品视频| 欧美成人国产一区二区| 亚洲一区二区三区在线播放| 99精品国产视频| 国产日产欧美一区二区视频| 青青国产91久久久久久| 欧美三级韩国三级日本三斤| 中文字幕永久在线不卡| 国产精品99久久久久久宅男| 精品剧情在线观看| 久久精品国产一区二区三区免费看| 欧美日本免费一区二区三区| 亚洲欧洲av在线| 成人av在线播放网址| 国产亚洲成av人在线观看导航| 久久精品国产亚洲一区二区三区| 337p亚洲精品色噜噜噜| 亚洲成人av福利| 欧美丰满美乳xxx高潮www| 性欧美大战久久久久久久久| 欧美日韩一区二区在线视频| 亚洲精品国产视频| 日本丰满少妇一区二区三区| 一区二区在线看| 欧美亚洲国产一区二区三区| 亚洲www啪成人一区二区麻豆| 欧美午夜一区二区三区免费大片| 亚洲午夜成aⅴ人片| 欧美色图免费看| 亚洲成人精品一区| 欧美一区二区三区免费大片| 男男视频亚洲欧美| 久久综合狠狠综合久久综合88 | 亚洲国产一区二区视频| 91黄色激情网站| 午夜精品福利在线| 欧美日韩一区二区三区高清| 日本中文在线一区| 精品久久久久久久一区二区蜜臀| 美女视频免费一区| 久久久国产精品不卡| www.亚洲色图.com| 亚洲一级不卡视频| 日韩久久久久久| 成人av免费在线观看| 一区二区三区**美女毛片| 69av一区二区三区| 国内国产精品久久| 亚洲视频在线观看一区| 欧美卡1卡2卡| 国产成人免费在线视频| 尤物在线观看一区| 2023国产一二三区日本精品2022| 成人av在线播放网站| 亚瑟在线精品视频| 中文字幕精品—区二区四季| 欧美性感一类影片在线播放| 另类专区欧美蜜桃臀第一页| 国产精品久久久久影院亚瑟| 欧美另类变人与禽xxxxx| 国精产品一区一区三区mba桃花| 亚洲欧美综合另类在线卡通| 日本一区二区三级电影在线观看| 一本色道久久综合亚洲91| 日本欧美肥老太交大片| 国产精品欧美久久久久无广告| 在线免费亚洲电影| 国产成人8x视频一区二区| 亚洲v精品v日韩v欧美v专区| 欧美激情综合五月色丁香小说| 欧美人xxxx| 91理论电影在线观看| 捆绑紧缚一区二区三区视频 | 亚洲国产视频网站| 国产三级一区二区| 91精品国产乱码久久蜜臀| 99视频一区二区三区| 精品无码三级在线观看视频| 亚洲国产精品一区二区久久 | xf在线a精品一区二区视频网站| 日本韩国一区二区三区| 成人高清视频免费观看| 麻豆极品一区二区三区| 五月天中文字幕一区二区| 综合欧美亚洲日本| 国产欧美日韩三级| 日韩欧美在线一区二区三区| 色天使久久综合网天天| 成人黄色片在线观看| 韩日精品视频一区| 免费的成人av| 天天操天天综合网| 亚洲成人免费观看| 亚洲综合网站在线观看| 亚洲另类一区二区| 久久99精品一区二区三区三区| 日韩电影在线看| 亚洲第一福利一区| 亚洲一区二区三区四区中文字幕| 久久九九全国免费| 精品国产区一区| ww久久中文字幕| 国产清纯在线一区二区www| 精品国产不卡一区二区三区| 精品国产凹凸成av人网站| 精品免费日韩av| 久久久精品人体av艺术| 国产偷国产偷精品高清尤物| 国产婷婷色一区二区三区在线| 久久精品人人爽人人爽| 国产欧美一区二区三区在线老狼| 久久久久国产免费免费 | 国产精品国产成人国产三级 | 韩国av一区二区| 大尺度一区二区| 99久久婷婷国产精品综合| 色婷婷激情久久| 欧美日韩久久久| 日韩精品一区二区三区蜜臀| 久久久久久久综合狠狠综合| 欧美国产一区视频在线观看| 亚洲欧美一区二区三区孕妇| 亚洲精品欧美二区三区中文字幕| 性做久久久久久免费观看欧美| 欧美aaaaa成人免费观看视频| 精品一区二区三区免费毛片爱| 高清在线不卡av| 欧美午夜影院一区| 日韩三级高清在线| 国产精品国产三级国产普通话99| 一区二区三区欧美激情| 青草国产精品久久久久久| 国产一区二区三区美女| 色综合夜色一区| 欧美大胆人体bbbb| 亚洲欧洲www| 日韩精品久久理论片| 国产成人av一区二区| 欧美日韩小视频| 欧美国产国产综合| 天天操天天色综合| 成人夜色视频网站在线观看| 91国偷自产一区二区三区成为亚洲经典 | 91色porny在线视频| 欧美日本一区二区| 国产精品视频yy9299一区| 亚洲成人一区在线| 成人精品亚洲人成在线| 欧美日韩免费一区二区三区| 久久久精品综合| 日日摸夜夜添夜夜添精品视频| 国产精品亚洲人在线观看| 欧美日韩欧美一区二区| 国产精品久久久久aaaa樱花| 麻豆专区一区二区三区四区五区| 91热门视频在线观看| 久久综合久久久久88| 亚洲国产视频直播| 91小视频免费看| 国产亚洲精品中文字幕| 免费成人在线视频观看| 欧洲av一区二区嗯嗯嗯啊| 中文字幕欧美日韩一区| 久久国产免费看| 欧美老人xxxx18| 亚洲视频免费在线观看| 国产精品主播直播| 欧美成人午夜电影| 五月天婷婷综合| 在线精品国精品国产尤物884a| 国产女人水真多18毛片18精品视频 | 综合久久国产九一剧情麻豆| 国产伦理精品不卡| 精品国产在天天线2019| 日韩电影在线看| 欧美久久久久久久久久| 亚洲乱码中文字幕综合| 91免费版在线| 综合中文字幕亚洲| 成人黄色一级视频| 中文幕一区二区三区久久蜜桃| 国产专区综合网| 久久品道一品道久久精品| 久久国产剧场电影| 日韩女同互慰一区二区|