Public Member Functions | Public Attributes | Static Private Attributes

I3Composite Class Reference

Composite test application for I3. More...

Inheritance diagram for I3Composite:
I3BaseApp

List of all members.

Public Member Functions

void initializeApp (int stage)
 App initialization - should be overwritten by application.
void initializeI3 ()
 Application I3 initialize - should be overwritten by application.
void deliver (I3Trigger &trigger, I3IdentifierStack &stack, cPacket *msg)
 Delivers packets coming from I3 - should be overwritten by application.
void handleTimerEvent (cMessage *msg)
 Handles timers - should be overwritten by application.
void createMessage ()

Public Attributes

int myIndex
cMessage * sendPacketTimer

Static Private Attributes

static int index = 0

Detailed Description

Composite test application for I3.

This tests the ability of I3 to realize service composition in which the receving node decides the routing of a packet. First, all nodes insert their own trigger. Then, node 0 creates an packet containing an empty sentence (""), and sends it to I3 with an identifier stack containing the triggers of service nodes 1, 2, 3, 4 and then node 0. I3 then routes the packet to each of those triggers in that order. Each service node adds some words to the sentence ands sends it back to I3 with the same identifier stack it received. When it returns to node 0 it displays the sentence it received and starts again.

Definition at line 43 of file I3Composite.cc.


Member Function Documentation

void I3Composite::createMessage (  ) 

Definition at line 80 of file I3Composite.cc.

Referenced by deliver(), and handleTimerEvent().

                                {
    I3CompositeMessage *cmsg = new I3CompositeMessage();

    cmsg->sentence = "";

    I3Identifier id0("Composite 0"),
    id1("Composite 1"),
    id2("Composite 2"),
    id3("Composite 3"),
    id4("Composite 4");

    I3IdentifierStack stack;
    stack.push(id0);
    stack.push(id4);
    stack.push(id3);
    stack.push(id2);
    stack.push(id1);

    sendPacket(stack, cmsg);
}

void I3Composite::deliver ( I3Trigger trigger,
I3IdentifierStack stack,
cPacket *  msg 
) [virtual]

Delivers packets coming from I3 - should be overwritten by application.

Parameters:
trigger Application trigger to which the packet was sent
stack Identifier stack passed from I3
msg Arriving message

Reimplemented from I3BaseApp.

Definition at line 110 of file I3Composite.cc.

{
    I3CompositeMessage *cmsg = check_and_cast<I3CompositeMessage*>(msg);

    switch (myIndex) {
    case 0:
    {
        string final = "Final sentence: " + cmsg->sentence;
        getParentModule()->bubble(final.c_str());
        delete msg;
        createMessage();
        return;
    }
    case 1:
        getParentModule()->bubble("Adding 'He pounds'");
        cmsg->sentence += "He pounds ";
        break;
    case 2:
        getParentModule()->bubble("Adding 'his fists'");
        cmsg->sentence += "his fists ";
        break;
    case 3:
        getParentModule()->bubble("Adding 'against'");
        cmsg->sentence += "against ";
        break;
    case 4:
        getParentModule()->bubble("Adding 'the posts'");
        cmsg->sentence += "the posts ";
        break;
    default:
        delete msg;
        return;
    }
    sendPacket(stack, cmsg);
}

void I3Composite::handleTimerEvent ( cMessage *  msg  )  [virtual]

Handles timers - should be overwritten by application.

Parameters:
msg Timer to be handled

Reimplemented from I3BaseApp.

Definition at line 101 of file I3Composite.cc.

{
    if (myIndex == 0) { // only the first node
        getParentModule()->bubble("Starting chain!");
        createMessage();
    }
    delete msg;
}

void I3Composite::initializeApp ( int  stage  )  [virtual]

App initialization - should be overwritten by application.

I3 related commands should go in initializeI3.

Parameters:
stage Initialization stage passed from initialize()

Reimplemented from I3BaseApp.

Definition at line 60 of file I3Composite.cc.

{
    myIndex = index++;

}

void I3Composite::initializeI3 (  )  [virtual]

Application I3 initialize - should be overwritten by application.

Reimplemented from I3BaseApp.

Definition at line 66 of file I3Composite.cc.

{
    if (myIndex == 0) {
        sendPacketTimer = new cMessage("packet timer");
        scheduleAt(simTime() + 50, sendPacketTimer);
    }

    ostringstream os;
    os << "Composite " << myIndex;

    I3Identifier identifier(os.str());
    insertTrigger(identifier);
}


Member Data Documentation

int I3Composite::index = 0 [static, private]

Definition at line 46 of file I3Composite.cc.

Referenced by initializeApp().

Definition at line 48 of file I3Composite.cc.

Referenced by deliver(), handleTimerEvent(), initializeApp(), and initializeI3().

Definition at line 49 of file I3Composite.cc.

Referenced by initializeI3().


The documentation for this class was generated from the following file: