# txc9.cc

    //
    // This file is part of an OMNeT++/OMNEST simulation example.
    //
    // Copyright (C) 2003 Ahmet Sekercioglu
    // Copyright (C) 2003-2005 Andras Varga
    //
    // This file is distributed WITHOUT ANY WARRANTY. See the file
    // `license' for details on this and other legal matters.
    //

    #include <stdio.h>
    #include <string.h>
    #include <omnetpp.h>

    class Txc9 : public cSimpleModule
    {
      protected:
        virtual void forwardMessage(cMessage *msg);
        virtual void initialize();
        virtual void handleMessage(cMessage *msg);
    };

    Define_Module(Txc9);

    void Txc9::initialize()
    {
        if (index()==0)
        {
            // Boot the process scheduling the initial message as a self-message.
            char msgname[20];
            sprintf(msgname, "tic-%d", index());
            cMessage *msg = new cMessage(msgname);
            scheduleAt(0.0, msg);
        }
    }

    void Txc9::handleMessage(cMessage *msg)
    {
        if (index()==3)
        {
            // Message arrived.
            ev << "Message " << msg << " arrived.\n";
            delete msg;
        }
        else
        {
            // We need to forward the message.
            forwardMessage(msg);
        }
    }

    void Txc9::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 `out[]'.
        int n = gate("out")->size();
        int k = intuniform(0,n-1);

        ev << "Forwarding message " << msg << " on port out[" << k << "]\n";
        send(msg, "out", k);
    }