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

📄 manager.cc

📁 WSN仿真一例假定节点0(node[0])周期性广播消息其它节点接收到消息并转发出去
💻 CC
字号:
//-------------------------------------------------------------------//  file name: manager.cpp// //    - contains the implementation of manager class////-------------------------------------------------------------------#include "manager.h"#include <string>#include <fstream>void manager::initialize(){	int i,j;	// check out the parameters in the .ini file and in the .h file	if ((int)this->parentModule()->par("NNODES")!=NNODES)	{		ev << "manager::initialize() error: parameter NNODES is different in .ini and in .h files\n";		endSimulation();	}	if ((int)this->parentModule()->par("MAXCONN")!=MAXCONN)	{		ev << "manager::initialize() error: parameter MAXCONN is different in .ini and in .h files\n";		endSimulation();	}	// just initialization code...	for (i=0;i<NNODES;i++)	{		for (j=0;j<NNODES;j++)		{			cm[i][j] = false;		}	}	// hide the manager from the display	setDisplayString("p=-100,-100,exact");	int dist = distance((int)this->parentModule()->par("SSTRENGTH"));	// generate randomly the initial positions of the nodes	nodepos_t pos[NNODES];	for (i=0;i<NNODES;i++)	{		pos[i].x = intrand(SPACEX);		pos[i].y = intrand(SPACEY);		// display the node on the screen		char tempstring[30];		sprintf(tempstring,"p=%d,%d,exact;i=snode_%d_%d",pos[i].x+MX,pos[i].y+MY,1,2);		this->parentModule()->submodule("snode",i)->setDisplayString(tempstring);		// connect this module to whomever is in transmission range		for (j=0;j<i;j++)		{			// if the two nodes can hear each other then connect them			if (dist*dist>=((pos[i].x-pos[j].x)*(pos[i].x-pos[j].x) + (pos[i].y-pos[j].y)*(pos[i].y-pos[j].y)))			{				cModule *mod1,*mod2;				mod1 = this->parentModule()->submodule("snode",i);				mod2 = this->parentModule()->submodule("snode",j);				cGate *gate1 = NULL;				cGate *gate2 = NULL;				int cnt1,cnt2;				// find the first empty gate on source				for (cnt1=0;cnt1<MAXCONN;cnt1++)				{					gate1 = mod1->gate("in",cnt1);					if (!gate1->isConnected())						break;				}				if (cnt1==MAXCONN)				{					ev << "error: maximum connectivity reached (1).\n";					endSimulation();				}				// find the first empty gate on destination				for (cnt2=0;cnt2<MAXCONN;cnt2++)				{					gate2 = mod2->gate("out",cnt2);					if (!gate2->isConnected())						break;				}				if (cnt2==MAXCONN)				{					ev << "error: maximum connectivity reached (2).\n";					endSimulation();				}				// connect the gates				gate1->setFrom(gate2);				gate2->setTo(gate1);				gate1->setDisplayString("m=m,50,50,50,50;o=#AAA,1;",false);				gate2->setDisplayString("m=m,50,50,50,50;o=#AAA,1;",false);				// connect the reverse link				gate1 = mod1->gate("out",cnt1);				gate2 = mod2->gate("in",cnt2);				gate1->setTo(gate2);				gate2->setFrom(gate1);				gate1->setDisplayString("m=m,50,50,50,50;o=#AAA,1;",false);				gate2->setDisplayString("m=m,50,50,50,50;o=#AAA,1;",false);				// update the data structure				cm[i][j] = true;				cm[j][i] = true;			}		}	}	// update each node data structure	for (i=0;i<NNODES;i++)	{		cModule *mod = this->parentModule()->submodule("snode",i);		mod->par("PX") = pos[i].x;		mod->par("PY") = pos[i].y;	}}void manager::activity(){	// main loop	while (1)	{		cMessage *msg;		msg = receive();		switch (msg->kind())		{		case M_UPDSSTRENGTH:						// signal strength update by a node			updateSignalStrength(msg);			delete msg;			break;				default:			ev << "manager::handleMessage() error: unknown message received by manager\n";			endSimulation();		}	}}void manager::updateSignalStrength(cMessage *msg){}int manager::distance(int sstrength){	int res;		// right now by signal strength i understand the range a node can communicate		// any other interpretations of the signal strength and conversions to distance		// can be performed here		res = sstrength;	return res;}

⌨️ 快捷键说明

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