📄 gear.cc
字号:
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 + -