I3Composite.cc

Go to the documentation of this file.
00001 // Copyright (C) 2006 Institut fuer Telematik, Universitaet Karlsruhe (TH)
00002 //
00003 // This program is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU General Public License
00005 // as published by the Free Software Foundation; either version 2
00006 // of the License, or (at your option) any later version.
00007 //
00008 // This program is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00011 // GNU General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU General Public License
00014 // along with this program; if not, write to the Free Software
00015 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00016 //
00017 
00023 #include "I3BaseApp.h"
00024 
00025 using namespace std;
00026 
00027 struct I3CompositeMessage : public cPacket {
00028     string sentence;
00029 
00030     I3CompositeMessage *dup() const {
00031         return new I3CompositeMessage(*this);
00032     }
00033 };
00034 
00043 class I3Composite : public I3BaseApp
00044 {
00045 private:
00046     static int index; // HACK Change to use index module when it's done
00047 public:
00048     int myIndex;
00049     cMessage *sendPacketTimer;
00050 
00051     void initializeApp(int stage);
00052     void initializeI3();
00053     void deliver(I3Trigger &trigger, I3IdentifierStack &stack, cPacket *msg);
00054     void handleTimerEvent(cMessage *msg);
00055     void createMessage();
00056 };
00057 
00058 int I3Composite::index = 0;
00059 
00060 void I3Composite::initializeApp(int stage)
00061 {
00062     myIndex = index++;
00063 
00064 }
00065 
00066 void I3Composite::initializeI3()
00067 {
00068     if (myIndex == 0) {
00069         sendPacketTimer = new cMessage("packet timer");
00070         scheduleAt(simTime() + 50, sendPacketTimer);
00071     }
00072 
00073     ostringstream os;
00074     os << "Composite " << myIndex;
00075 
00076     I3Identifier identifier(os.str());
00077     insertTrigger(identifier);
00078 }
00079 
00080 void I3Composite::createMessage() {
00081     I3CompositeMessage *cmsg = new I3CompositeMessage();
00082 
00083     cmsg->sentence = "";
00084 
00085     I3Identifier id0("Composite 0"),
00086     id1("Composite 1"),
00087     id2("Composite 2"),
00088     id3("Composite 3"),
00089     id4("Composite 4");
00090 
00091     I3IdentifierStack stack;
00092     stack.push(id0);
00093     stack.push(id4);
00094     stack.push(id3);
00095     stack.push(id2);
00096     stack.push(id1);
00097 
00098     sendPacket(stack, cmsg);
00099 }
00100 
00101 void I3Composite::handleTimerEvent(cMessage *msg)
00102 {
00103     if (myIndex == 0) { // only the first node
00104         getParentModule()->bubble("Starting chain!");
00105         createMessage();
00106     }
00107     delete msg;
00108 }
00109 
00110 void I3Composite::deliver(I3Trigger &trigger, I3IdentifierStack &stack, cPacket *msg)
00111 {
00112     I3CompositeMessage *cmsg = check_and_cast<I3CompositeMessage*>(msg);
00113 
00114     switch (myIndex) {
00115     case 0:
00116     {
00117         string final = "Final sentence: " + cmsg->sentence;
00118         getParentModule()->bubble(final.c_str());
00119         delete msg;
00120         createMessage();
00121         return;
00122     }
00123     case 1:
00124         getParentModule()->bubble("Adding 'He pounds'");
00125         cmsg->sentence += "He pounds ";
00126         break;
00127     case 2:
00128         getParentModule()->bubble("Adding 'his fists'");
00129         cmsg->sentence += "his fists ";
00130         break;
00131     case 3:
00132         getParentModule()->bubble("Adding 'against'");
00133         cmsg->sentence += "against ";
00134         break;
00135     case 4:
00136         getParentModule()->bubble("Adding 'the posts'");
00137         cmsg->sentence += "the posts ";
00138         break;
00139     default:
00140         delete msg;
00141         return;
00142     }
00143     sendPacket(stack, cmsg);
00144 }
00145 
00146 
00147 Define_Module(I3Composite);
00148 
00149 
Generated on Wed May 26 16:21:14 2010 for OverSim by  doxygen 1.6.3