📄 application.cpp
字号:
//-------------------------------------------------------------------// file name: application.cpp// // - contains the implementation of application class////-------------------------------------------------------------------#include "application.h"// some constant definitions// message definitions
#define SEND_BLACK_REQ_NEW { \
cMessage *msg = new cMessage("BlackRequest"); \
msg->setKind(M_HIGHLOW); \
msg->addPar("senderPX")=this->parentModule()->par("PX");\
msg->addPar("senderPY")=this->parentModule()->par("PY");\
msg->addPar("senderId")=ID; \
msg->addPar("nhops")=0; \
msg->addPar("ppsenderId")=ID; \
msg->addPar("psenderId")=ID; \
send(msg,"lowergate_out"); \
}
#define SEND_DARKGREY_REQ_NEW { \
cMessage *msg = new cMessage("DarkGreyRequest"); \
msg->addPar("senderPX")=this->parentModule()->par("PX");\
msg->addPar("senderPY")=this->parentModule()->par("PY");\
msg->setKind(M_HIGHLOW); \
msg->addPar("senderId")=ID; \
msg->addPar("nhops")=nhops; \
msg->addPar("ppsenderId")=ppsenderId; \
msg->addPar("psenderId")=psenderId; \
send(msg,"lowergate_out"); \
}
#define SEND_GREY_REQ_NEW { \
cMessage *msg = new cMessage("GreyRequest"); \
msg->addPar("senderPX")=this->parentModule()->par("PX");\
msg->addPar("senderPY")=this->parentModule()->par("PY");\
msg->setKind(M_HIGHLOW); \
msg->addPar("senderId")=ID; \
msg->addPar("nhops")=nhops; \
msg->addPar("ppsenderId")=ppsenderId; \
msg->addPar("psenderId")=psenderId; \
send(msg,"lowergate_out"); \
} void application::initialize(){ isreq=-1;
for(int i=0;i<NNODES;i++)
{
psender[i]=-1;
ppsender[i]=-1;
}
if (ID==0) // node 0 starts the algorithm {
isreq=1;
parentModule()->par("TYPE")=1;
SEND_BLACK_REQ_NEW;
}}void application::finish(){
int type=parentModule()->par("TYPE");
if(type==1)
{
for(int i=0;i<NNODES;i++)
{
if(ppsender[i]!=-1 && psender[i]!=-1 && ppsender[i]!=psender[i] && ID!=ppsenderId)
ev<<ID<<" "<<psender[i]<<" "<<ppsender[i]<<" "<<ppsenderId<<endl;
}
}}void application::handleMessage(cMessage *msg){
msg->addPar("senderPX")=this->parentModule()->par("PX");
msg->addPar("senderPY")=this->parentModule()->par("PY");
nhops=msg->par("nhops");
ppsenderId=msg->par("ppsenderId");
psenderId=msg->par("psenderId");
if(nhops==0)
{
nhops++;
ppsenderId=msg->par("ppsenderId");
psenderId=ID;
}
else if(nhops==1)
{
nhops++;
ppsenderId=msg->par("ppsenderId");
psenderId=msg->par("psenderId");
}
if(nhops==2)
{
ppsender[ppsenderId]=psenderId;
psender[ppsenderId]=msg->par("senderId");
}
switch(msg->kind()) { case M_LOWHIGH: { if(strcmp(msg->name(),"BlackRequest")==0)
{
processBlackRequest(msg);
break;
}
if(strcmp(msg->name(),"GreyRequest")==0)
{
processGreyRequest(msg);
break;
}
if(strcmp(msg->name(),"DarkGreyRequest")==0)
{
processDarkGreyRequest(msg);
break;
}
ev << "unknown message received from another node.\n"; endSimulation(); } case M_SELF: { if (strcmp(msg->name(),"StartUp")==0) { SEND_BLACK_REQ_NEW; delete msg; break; } ev << "unknown self message received\n"; endSimulation(); } default: ev << "unknown message received\n"; endSimulation(); }}
void application::processBlackRequest(cMessage *msg)
{
isreq=parentModule()->par("TYPE");
if(isreq==1||isreq==0)
{
if(nhops==2)
{
ppsender[ppsenderId]=psenderId;
psender[psenderId]=msg->par("senderId");
}
delete msg;
return;
}
else if (isreq==-1)
{
UPDATECOLOR(3);
isreq=0;
parentModule()->par("TYPE")=0;
double time=(double)msg->par("timeout");
scheduleStart(simTime()+time);
SEND_GREY_REQ_NEW;
delete msg;
}
}
void application::processGreyRequest(cMessage *msg)
{
isreq=parentModule()->par("TYPE");
if(isreq==1||isreq==0||isreq==2)
{
delete msg;
return;
}
else if (isreq==-1)
{
UPDATECOLOR(5);
isreq=2;
parentModule()->par("TYPE")=2;
SEND_DARKGREY_REQ_NEW;
delete msg;
}
}
void application::processDarkGreyRequest(cMessage *msg)
{
isreq=parentModule()->par("TYPE");
if(isreq==-1)
{
int a=parentModule()->par("ANOTHER");
if(a==1)
{
UPDATECOLOR(3);
isreq=0;
parentModule()->par("TYPE")=0;
SEND_GREY_REQ_NEW;
delete msg;
}
else
{
UPDATECOLOR(7);
isreq=1;
parentModule()->par("TYPE")=1;
SEND_BLACK_REQ_NEW;
delete msg;
}
}
else
{
delete msg;
return ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -