omnet++中tictoc13的学习笔记

一、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);
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值