//// This file is part of an OMNeT++/OMNEST simulation example.//// Copyright (C) 2003 Ahmet Sekercioglu// Copyright (C) 2003-2015 Andras Varga//// This file is distributed WITHOUT ANY WARRANTY. See the file// `license' for details on this and other legal matters.//#include <cstdio>#include <cstring>#include <omnetpp.h>using namespace omnetpp;/** * Let's make it more interesting by using several (n) `tic' modules, * and connecting every module to every other. For now, let's keep it * simple what they do: module 0 generates a message, and the others * keep tossing it around in random directions until it arrives at * module 2. */class Txc12 : public cSimpleModule{ protected: virtual void forwardMessage(cMessage *msg); virtual void initialize() override; virtual void handleMessage(cMessage *msg) override;};Define_Module(Txc12);void Txc12::initialize(){ if (getIndex() == 0) { // Boot the process scheduling the initial message as a self-message. char msgname[20]; snprintf(msgname, sizeof(msgname), "tic-%d", getIndex()); cMessage *msg = new cMessage(msgname); scheduleAt(0.0, msg); }}void Txc12::handleMessage(cMessage *msg){ if (getIndex() == 3) { // Message arrived. EV << "Message " << msg << " arrived.\n"; delete msg; } else { // We need to forward the message. forwardMessage(msg); }}void Txc12::forwardMessage(cMessage *msg){ // In this example, we just pick a random gate to send it on. // We draw a random number between 0 and the size of gate `gate[]'. int n = gateSize("gate"); int k = intuniform(0, n-1); EV << "Forwarding message " << msg << " on gate[" << k << "]\n"; // $o and $i suffix is used to identify the input/output part of a two way gate send(msg, "gate$o", k);}