📄 layer0.cpp
字号:
//-------------------------------------------------------------------
// file name: layer0.cpp
//
// - contains the implementation of layer0 class
//
//-------------------------------------------------------------------
#include "layer0.h"
#include <cQueue.h>
#include <string.h>
#include <cObject.h>
void layer0::initialize()
{
for(int i=0;i<NNODES;i++)
data[i]=0;
}
void layer0::finish(){/* int type=parentModule()->par("TYPE"); if(type==1) { ev<<"cluster head node:"<<ID<<" other nodes : "; for(int i=0;i<NNODES;i++) { if(data[i]==1) ev<<i<<" "; } ev<<endl; }*/}
void layer0::activity()
{
// main loop
while(1)
{
if(ID==0)
UPDATECOLOR(7);
cMessage *msg=receive();
switch (msg->kind())
{
case M_NODE: // message from another node
{
//compute the nodes's distance
int senderPX=msg->par("senderPX");
int senderPY=msg->par("senderPY");
int arrivalPX=this->parentModule()->par("PX");
int arrivalPY=this->parentModule()->par("PY");
int dis=(senderPX-arrivalPX)*(senderPX-arrivalPX)+(senderPY-arrivalPY)*(senderPY-arrivalPY);
if(dis==0)
{
ev<<"node "<<msg->par("senderId")<<" and node "<<ID<<" is in the same position!"<<endl;
dis=1;
}
//set timeout
simtime_t timeout=400000/dis;
msg->addPar("timeout")=timeout;
msg->setKind(M_LOWHIGH);
//transmitte black node's request
if(strcmp(msg->name(),"BlackRequest")==0)
send(msg,"uppergate_out");
//transmitte grey node's request
else if (strcmp(msg->name(),"GreyRequest")==0)
{
int type=parentModule()->par("TYPE");
if(type==-1)
{
cQueue queue;
waitAndEnqueue(timeout,&queue);
cObject *m=queue.findObject("BlackRequest");
if(m!=NULL)
parentModule()->par("TYPE")=2;
queue.clear();
send(msg,"uppergate_out");
}
else
send(msg,"uppergate_out");
}
}
break;
case M_HIGHLOW: // message from a higher layer
{
msg->setKind(M_NODE);
// duplicate the message and send it through all the gates
for (int i=0;i<NNODES;i++)
{
cGate *tmpgate = parentModule()->gate("out",i);
if (tmpgate==NULL)
continue;
// if gate is connected, send a message through it
if (tmpgate->toGate()!=NULL)
{
cMessage *tmpmsg = new cMessage(*msg);
send(tmpmsg,"lowergate_out",i);
cGate *gate=tmpgate->toGate();
cModule *mod=gate->ownerModule();
int id=mod->index();
data[id]=1;
}
}
// delete original message
delete msg;
}
break;
default: // unknown message received - bug!.
ev << "layer0::activity() error: unknow message received\n";
endSimulation();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -