一、msg文件
从13开始,加入了msg文件,msg文件是编写自定义消息的文件
message TicTocMsg13
{
int source; //源地址
int destination; //目的地址
int hopCount = 0; //跳数
}
在tictoc13中,使用了自己定义的消息类型
建立 这个消息之后,系统会自动生成一个13_m.h文件和一个13_m.cc文件,这两个文件都是不需要修改的。
二、ned文件
与之前的一样
三、cc文件
#include "tictoc13_m.h"//头文件要包含,这是自己定义的消息类型
首先要在包含头文件
在tictoc12 中是定义一个massage
cMessage *msg = new cMessage(msgname);
在13中我们要发送的是自定义的消息
class Txc13 : public cSimpleModule
{
protected:
virtual TicTocMsg13 *generateMessage();//这是将消息类型强制转换为 TicTocMsg13 *。
virtual void forwardMessage(TicTocMsg13 *msg);
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
};
对于TicTocMsg13,这是一个类,函数返回这个类。
*generateMessage()下边有具体的定义。
void Txc13::initialize()
{
// Module 0 sends the first message
if (getIndex() == 0) {
//将初始消息转化为自消息
TicTocMsg13 *msg = generateMessage();
scheduleAt(0.0, msg);
}
}
void Txc13::handleMessage(cMessage *msg)
{
TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);
//类型转换
//所有的消息都是继承自cmessgae类
if (ttmsg->getDestination() == getIndex()) {
// 消息到达
EV << "Message " << ttmsg << " arrived after "
<< ttmsg->getHopCount() << " hops.\n";
bubble("ARRIVED, starting new one!");//闪烁一下
delete ttmsg;
// 另一个消息
EV << "Generating another message: ";
TicTocMsg13 *newmsg = generateMessage();
EV << newmsg << endl;
forwardMessage(newmsg);
}
else {
// 我们需要转发消息
forwardMessage(ttmsg);
}
}
TicTocMsg13 *Txc13::generateMessage()
{
// 生成源地址和目的地址。
int src = getIndex(); // our module index原地址
int n = getVectorSize(); // module vector size获取向量的大小
int dest = intuniform(0, n-2);//产生随机的节点,作为目的地址
if (dest >= src)
dest++;
char msgname[20];
sprintf(msgname, "tic-%d-to-%d", src, dest);
// Create message object and set source and destination field.
TicTocMsg13 *msg = new TicTocMsg13(msgname);
msg->setSource(src);
msg->setDestination(dest);
return msg;
}
void Txc13::forwardMessage(TicTocMsg13 *msg)//转发消息
{
// 增加跳数。
msg->setHopCount(msg->getHopCount()+1);
// Same routing as before: random gate.
int n = gateSize("gate");
int k = intuniform(0, n-1);//随机产生一个门
EV << "Forwarding message " << msg << " on gate[" << k << "]\n";
send(msg, "gate$o", k);
}