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

📄 gear.cc

📁 基于Oment++的无线传感器网络仿真
💻 CC
📖 第 1 页 / 共 3 页
字号:
				sprintf(s,"%d",MyNodeId);				if(gateWay->find(s)!=-1)				{				if(isExp)				{					sprintf(a, "%f  self msg EXPLORATORY  MyNodeId =%d NextHopId = %d\n",simTime(),MyNodeId,dataHdr->NextHopDestId);				}				else				{					sprintf(a, "%f self msg DATA  MyNodeId =%d NextHopId = %d\n",simTime(), MyNodeId,dataHdr->NextHopDestId);				}				FILE * abc;				abc = fopen("GateWay", "ab");				fputs(a, abc);			//	fputs(temp1, abc);				fclose(abc);				}			}			if(isExp)			{				//printf("The SRC ARRAY size is ======%d",srcArray->items());				int k=0;				int* Nid = new int[srcArray->items()];				bool temp=false;				for (int i=0; i<srcArray->items(); i++)				{					QueryObject* qObject = (QueryObject*)srcArray->get(i);					//printf("The Query is from %d",qObject->getFinalSrc());					DataMsg* dMsgDup = (DataMsg*)dMsg->dup();					int destId = qObject->getSrcId();					Header *hdr=&dMsgDup->getHdr();					hdr->srcNodeId=MyNodeId;					hdr->NextHopDestId = destId;					hdr->OriginSrc=qObject->getFinalSrc();					cPar param=dMsg->par("VisitedNodeList");					cArray* VisitedNodes=(cArray*)param.objectValue();					IdWrapper* idw=new IdWrapper(MyNodeId);					VisitedNodes->takeOwnership(false);					VisitedNodes->add(idw);					dMsgDup->setIFinalDest(qObject->getFinalSrc());						qObject->setIsAlive(false);					if(fileWrite)					{												sprintf(fileName, "500/%s%d.txt", filea, dMsgDup->getIFinalDest());						char a[100];						sprintf(a, "%f self msg EXPLORATORY MyNodeId =%d NextHopId = %d\n",simTime(), MyNodeId,destId);						FILE * abc,* abc1;						abc = fopen(fileName, "ab");						abc1 =fopen("filea","ab");						fputs(a,abc);					//	fputs(a, abc1);					//	fputs(temp1, abc);						fclose(abc);						fclose(abc1);					}					 				int delayTime= DATA_FORWARD_DELAY + (int) ((DATA_FORWARD_JITTER * (rand() * 1.0 / RAND_MAX) - (DATA_FORWARD_JITTER / 2)));	 				delay= delayTime / 1000.0;										sendDown(dMsgDup,delay);				}			}			else			{				//QueryObject* qObject = (QueryObject*)srcArray->get(i);				int k=0;				if(fileWrite)				{										seqNo=seqNo+1;					if(false==dMsg->hasPar("SeqNo"))					dMsg->addPar("SeqNo")=seqNo;					else					dMsg->par("SeqNo")=seqNo;					char a[100];					sprintf(a, "%f seq %d self msg DATA  MyNodeId =%d  final Dest %d \n",simTime(),seqNo,MyNodeId,dMsg->getIFinalDest());					FILE *abc1;					abc1 =fopen("filea","ab");					fputs(a,abc1);					//fputs(temp1, abc);					fclose(abc1);									}				int* Nid = new int[srcArray->items()];				for (int i=0; i<srcArray->items(); i++)				{					QueryObject* qObject = (QueryObject*)srcArray->get(i);				int destId = qObject->getSrcId();					unsigned int finalSrc=qObject->getFinalSrc();					bool temp = false;					//printf( "%f DATA for Query Src %d, ALIVE %d MyNodeId = %d\n",simTime(),finalSrc,qObject->getIsAlive(),MyNodeId);						if(!qObject->getIsAlive())						continue;					for(int l=0;l<k;l++)					if (Nid[l]==destId)					{						temp = true;						break;					}					if(!temp)					{					  DataMsg* dMsgDup = (DataMsg*)dMsg->dup();					  Nid[k++]= destId;					  Header *hdr=&dMsgDup->getHdr();					  hdr->srcNodeId=MyNodeId;					  hdr->NextHopDestId = destId;					  hdr->OriginSrc=finalSrc;					  cPar param=dMsg->par("VisitedNodeList");					  cArray* VisitedNodes=(cArray*)param.objectValue();					  VisitedNodes->clear();					  IdWrapper* idw=new IdWrapper(MyNodeId);					  VisitedNodes->takeOwnership(false);					  VisitedNodes->add(idw);					  dMsgDup->setIFinalDest(qObject->getFinalSrc());					if(fileWrite)					  {						sprintf(fileName, "500/%s%d.txt", filea, dMsgDup->getIFinalDest());						char a[100];						sprintf(a, "%f self msg DATA  MyNodeId =%d NextHopId = %d final Dest %d \n",simTime(), MyNodeId,destId,dMsgDup->getIFinalDest());						FILE * abc;						abc = fopen(fileName, "ab");						fputs(a, abc);						//fputs(temp1, abc);						fclose(abc);					  }					/*if(fileWrite)				{					char a[100];					//sprintf(a, "%f self msg DATA  MyNodeId =%d  final Dest %d \n",simTime(), MyNodeId,dMsg->getIFinalDest());						sprintf(a, "%f self msg DATA  MyNodeId =%d NextHopId = %d final Dest %d \n",simTime(), MyNodeId,destId,dMsgDup->getIFinalDest());					FILE *abc1;					abc1 =fopen("filea","ab");					fputs(a,abc1);					//fputs(temp1, abc);					fclose(abc1);				}*/	 				int delayTime= DATA_FORWARD_DELAY + (int) ((DATA_FORWARD_JITTER * (rand() * 1.0 / RAND_MAX) - (DATA_FORWARD_JITTER / 2)));	 				delay= delayTime / 1000.0;					//printf("DELAY= %f \n",delay);					  sendDown(dMsgDup,delay);					} 				}				delete[] Nid;			}			int t = pNode->par("delay1");			//printf("THE DELAY FROM INI===%d", t);			double delay = (double)t/10;			//printf("THE DELAY VALUE IS %f", delay);	        double d = simTime()+(double)dataRate;			if(!isExp)			{				//if(d < 265.0)				scheduleAt(d,dMsg);			}			else {				if(dMsg->isScheduled() ) cancelEvent(dMsg);					delete dMsg;			     }						}		else		delete dMsg;	}	else	{		bool isExp = dMsg->getExploratory();		int x =((CoOrdinatorBase*) pCoOrdinator)->getX();		int y =((CoOrdinatorBase*) pCoOrdinator)->getY();		int RegionX = dMsg->getRegionX();		int RegionY = dMsg->getRegionY();		int Radius =  dMsg->getRadius();		QueryObject* qObject;		char* s=new char[50];		int destId;		//printf("before calling isInRegion MyNodeId===%d\n", MyNodeId);		if(!isInRegion((cMessage*)dMsg))		{			sprintf(s,"%d,%d,%d",RegionX,RegionY,Radius);			Region* reg=(Region*)RegionList->get(s);			cArray* qList = reg->getQueryList();			int* Nid = new int[qList->items()];			int k=0;			char del[100];			sprintf(del, "NID%dX%dY%dR%d", dMsg->getIFinalDest(), RegionX, RegionY, Radius);			//printf("------The QID == %s ------MyNodeId==%d", del, MyNodeId);			//printf("Not in region the QList size =====%d\n", qList->items());			if(dMsg->getExploratory())			{				DataMsg* dMsgDup = (DataMsg*)dMsg->dup();				char strQid[100];				sprintf(strQid, "NID%dX%dY%dR%d", dMsg->getIFinalDest(), RegionX, RegionY, Radius);				//printf("------The QID == %s ------", strQid);				qObject = (QueryObject*)qList->get(strQid);				int destId = qObject->getSrcId();				Header *hdr=&dMsgDup->getHdr();				hdr->srcNodeId=MyNodeId;				hdr->NextHopDestId = destId;				hdr->OriginSrc=qObject->getFinalSrc();				dMsgDup->setIFinalDest(qObject->getFinalSrc());				qObject->setIsAlive(false);	 			int delayTime= DATA_FORWARD_DELAY + (int) ((DATA_FORWARD_JITTER * (rand() * 1.0 / RAND_MAX) - (DATA_FORWARD_JITTER / 2)));	 			delay= delayTime / 1000.0;				sendDown(dMsgDup,delay);				if(fileWrite)				{				  sprintf(fileName, "500/%s%d.txt", filea, dMsg->getIFinalDest());                  	  	  char a[100];				  if(isExp)				  {					sprintf(a, "%.15f FORWARDING EXPLORATORY DATA  MyNodeId =%d NextHopId = %d\n",simTime(),MyNodeId,hdr->NextHopDestId);				  }				  else				  {					sprintf(a, "%.15f DATA  MyNodeId =%d NextHopId = %d \n",simTime(), MyNodeId, hdr->NextHopDestId);				  }				  FILE * abc;				  abc = fopen(fileName, "ab");				  fputs(a, abc);				  //fputs(temp1, abc);				  fclose(abc);				}			}			else			{			for(int i=0;i<qList->items();i++)			{							 qObject = (QueryObject*)(qList->get(i));				 //printf("QUERY ID ISi %s\n",(dMsg->par("QueryId")).stringValue());				 if(!qObject->getIsAlive()&&!isExp)					continue;				 destId = qObject->getSrcId();				 unsigned int finalSrc=qObject->getFinalSrc();				if(MyNodeId==qObject->getFinalSrc())				continue;				//printf("DATAMyNodeId==%d destId ==%d finalSrc===%d\n", MyNodeId, destId, finalSrc);				bool temp = false;				 for(int l=0;l<k;l++)					if (Nid[l]==destId)					{					  temp = true;					  break;					}				 if(!temp)				 {				  Nid[k++]= destId;							  dMsg->setIFinalDest(finalSrc);				  Header *hdr=&dMsg->getHdr();				  int iGotFrom = hdr->srcNodeId;				  hdr->srcNodeId=MyNodeId;				  hdr->NextHopDestId = destId;				  cMessage* dMsg1=(cMessage*)dMsg->dup();				  if (isExp)				  {					qObject->setIsAlive(false);				  }					 			int delayTime= DATA_FORWARD_DELAY + (int) ((DATA_FORWARD_JITTER * (rand() * 1.0 / RAND_MAX) - (DATA_FORWARD_JITTER / 2)));	 			delay= delayTime / 1000.0;				  sendDown(dMsg1,delay);				  //do we do this				/*  srcArray->takeOwnership(false);				  srcArray->set(qObject);*/				qList->takeOwnership(false);				qList->set(qObject);				  if(fileWrite)				  {				 	  sprintf(fileName, "500/%s%d.txt", filea, dMsg->getIFinalDest());                  	  		char a[100];					  if(isExp)					  {						sprintf(a, "%f EXPLORATORY  MyNodeId =%d NextHopId = %d\n",simTime(),MyNodeId,hdr->NextHopDestId);					  }					  else					  {						sprintf(a, "%f DATA  MyNodeId =%d NextHopId = %d Got Form1 %d \n",simTime(), MyNodeId, hdr->NextHopDestId, iGotFrom);					  }					FILE * abc;					abc = fopen(fileName, "ab");					fputs(a, abc);				//	fputs(temp1, abc);					fclose(abc);				  }				 }			}			}			delete dMsg;			delete[] Nid;			delete s;				}		else		{			/*if(isExp)			{				delete dMsg;				return;			}*/			//sprintf(s, "NID%dX%dY%dR%d", dMsg->getIFinalDest(), RegionX, RegionY, Radius);			//printf("In ELse MyNodeId==%d the  size==%d\n", MyNodeId, srcArray->items());		         				if(!isAlreadyRecv((QueryPacket*)dMsg))			{				if(dMsg->getExploratory())				{					DataMsg* dMsgDup = (DataMsg*)dMsg->dup();					char strQid[100];					sprintf(strQid, "NID%dX%dY%dR%d", dMsg->getIFinalDest(), RegionX, RegionY, Radius);					qObject = (QueryObject*)srcArray->get(strQid);					int destId = qObject->getSrcId();					Header *hdr=&dMsgDup->getHdr();					hdr->srcNodeId=MyNodeId;					hdr->NextHopDestId = destId;					dMsgDup->setIFinalDest(qObject->getFinalSrc());					qObject->setIsAlive(false);						 			int delayTime= DATA_FORWARD_DELAY + (int) ((DATA_FORWARD_JITTER * (rand() * 1.0 / RAND_MAX) - (DATA_FORWARD_JITTER / 2)));	 			delay= delayTime / 1000.0;					sendDown(dMsgDup,delay);				}				else				{				int k=0;								int* Nid = new int[srcArray->items()];				for (int i = 0; i<srcArray->items();i++ )				{					qObject = (QueryObject*)srcArray->get(i);					//printf("Is Alive == %d\n and QueryId==%s\n",qObject->getIsAlive(), qObject->getQueryId()); 					if(qObject->getIsAlive())    //||dMsg->getExploratory())					{						int destId = qObject->getSrcId();						//printf("NODE ID PASSED \n");						if(isAlreadyRecv((QueryPacket*)dMsg,destId))						{							//	printf("Receiving duplicate Message %d\n",destId);							continue;						}													bool temp = false;				 		for(int l=0;l<k;l++)						if (Nid[l]==destId)						{					  	temp = true;					  	break;						}				 	if(!temp)				 	{	Nid[k++]=destId;												DataMsg* dMsgDup = (DataMsg*)dMsg->dup();						Header *hdr=&dMsgDup->getHdr();						hdr->srcNodeId=MyNodeId;						hdr->NextHopDestId = destId;						hdr->OriginSrc=qObject->getFinalSrc();						dMsgDup->setIFinalDest(qObject->getFinalSrc());					  /*if (isExp)						{							qObject->setIsAlive(false);						}									  */      					  if(fileWrite)					  {						sprintf(fileName, "500/%s%d.txt", filea, dMsgDup->getIFinalDest());						char a[100];						if(isExp)						{							sprintf(a, "%f Inside Region EXPLORATORY Data MyNodeId =%d NextHopId = %d\n",simTime(),MyNodeId,hdr->NextHopDestId);						}						else						{							sprintf(a, "%f Inside Region DATA  MyNodeId =%d NextHopId = %d Got From %d \n",simTime(), MyNodeId,hdr->NextHopDestId,hdr->srcNodeId);						}														FILE * abc;								abc = fopen(fileName, "ab");								fputs(a, abc);								fclose(abc);						IdWrapper* idw =new IdWrapper(MyNodeId);						sprintf(s,"%d",MyNodeId);						if(gateWay->find(s)!=-1)						{							abc=fopen("GateWay","ab");							fputs(a,abc);							fclose(abc);						}					  }					cPar param=dMsg->par("VisitedNodeList");					cArray* VisitedNodes=(cArray*)param.objectValue();					IdWrapper* idw=new IdWrapper(MyNodeId);					VisitedNodes->takeOwnership(false);					VisitedNodes->add(idw);	 			int delayTime= DATA_FORWARD_DELAY + (int) ((DATA_FORWARD_JITTER * (rand() * 1.0 / RAND_MAX) - (DATA_FORWARD_JITTER / 2)));	 			delay= delayTime / 1000.0;					sendDown(dMsgDup,delay);					}				    }				}				}			delete dMsg;			}	    }	}}bool Gear::checkIfAnyQueryAlive(cArray* qList){	for(int i=0;i<qList->items();i++)	{		 QueryObject* qObject = (QueryObject*)(qList->get(i));		 if(qObject->getIsAlive())			return true;	}	return false;}void Gear::setSrcNode(QueryPacket* msg){	Header *hdr=&msg->getHdr();	unsigned int nodeid=hdr->srcNodeId;	//if(!checkIfReceivedQueryFormSrc(nodeid))	//{	cPar* qIdPar = &msg->par("QueryId");	char qId[50];	strcpy(qId, qIdPar->stringValue());	QueryObject* qryObject=new QueryObject(qId);	if(msg->getExp())		qryObject->setIsAlive(true); 	else		qryObject->setIsAlive(false);		//printf("MyNodeId ==%d adding query SRC ==%d SrcId=  %d qryObject->setIsAlive= %d ",MyNodeId, msg->getIQuerySrc(),nodeid,qryObject->getIsAlive());	qryObject->setSrcId(nodeid);	qryObject->setFinalSrc(msg->getIQuerySrc());	srcArray->takeOwnership(false);	srcArray->set(qryObject);		//}}bool Gear::checkIfReceivedQueryFormSrc(int srcNodeId){	//printf("Inside checkIfReceivedQueryFormSrc");	for (int i=0; i<srcArray->items(); i++)	{		QueryObject* qObject = (QueryObject*)srcArray->get(i);		if(qObject->getSrcId()==srcNodeId && qObject->getIsAlive())		{			//printf("TRUE");						return true;		}	}	//printf("FALSE");	return false;}void Gear::floodRegionNeigh(QueryPacket* msg){               	//printf("1 floodRegionNeigh::QueryPacket %d", QueryPacket::countQueryPkt); 	QueryPacket *msg1=(QueryPacket*)(msg->dup());	//printf("2 floodRegionNeigh::QueryPacket %d", QueryPacket::countQueryPkt); 	msg1->setKind(FLOOD);	Header* hdr=&(msg1->getHdr());	hdr->NextHopDestId=999999;	sendDown(msg1);	delete msg;}bool Gear::isInRegion(cMessage* msg){	int x =((CoOrdinatorBase*) pCoOrdinator)->getX();	int y =((CoOrdinatorBase*) pCoOrdinator)->getY();	int x1,y1,x2,y2,RegionX,RegionY;	sprintf(s, "%s", "ATTRIBUTE");	typedef std::vector<Attribute> vecAttribute;	vecAttribute newVecAttr;	test* t;	cPar* VecParam;	try{	 VecParam = &msg->par(s);	 t=(test*)VecParam->objectValue();	}	catch(cException* e)	{		printf("In exception %s\n",e->message());	}	newVecAttr=t->t_vecAttr;  	Attribute atr;	bool check = true;	atr= Attribute::find_key_from(Attribute::LONGITUDE_L, &newVecAttr);	check =  atr.compareAttribute(x);	x1=atr.getVal();	atr= Attribute::find_key_from(Attribute::LONGITUDE_R, &newVecAttr);	if(check)

⌨️ 快捷键说明

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