void Txc14::forwardMessage(TicTocMsg14 *msg)
{
int n = gateSize("gate$o");
int k = intuniform(0,n-1);
cGate *arrivalGate = msg->getArrivalGate();
if (arrivalGate == NULL) //self-message, do what?
{
msg->setHopCount(msg->getHopCount()+1);
EV << "Forwarding self message " << msg << " on port out[" << k << "]\n";
send(msg, "gate$o", k);
}
else if (arrivalGate != NULL)
{.
msg->setHopCount(msg->getHopCount()+1);
int arrivalGateIndex = arrivalGate->getIndex();
if (n >= 2) //if out gates are more than 1, easy
{
while (arrivalGateIndex == k
{
k = intuniform(0,n-1);
}
}
EV << "Forwarding message " << msg << " on port out[" << k << "]\n";
send(msg, "gate$o", k);
}
}
void Txc14::handleMessage(cMessage *msg)
{
TicTocMsg14 *ttmsg = check_and_cast<TicTocMsg14 *>(msg);
if (ttmsg->getDestination() == getIndex()) {
int hopcount = ttmsg->getHopCount();
EV << "Message " << ttmsg << " arrived after " << hopcount << " hops.\n";
numReceived++;
bubble("ARRIVED, starting new one!");
delete ttmsg;
/** EV << "Generating another message: ";
TicTocMsg14 *newmsg = generateMessage();
EV << newmsg << endl;
forwardMessage(newmsg);
numSent++;
**/
}
else {
forwardMessage(ttmsg);
bubble("not here!");
}
}