Tải bản đầy đủ (.pdf) (26 trang)

Hướng dẫn TicToc cho Omnet

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1007.46 KB, 26 trang )



Hướng dẫn TicToc cho Omnet++
ng dn ngng dn v Omnet++ giúp bn do qua mt ví d cho
vic mô hình hóa và mô phng, cho bn thy mt s ng dùng
vi các tin ích Omnet++.
Bài này da trên ví d mô phng TicToc, bn có th tìm thy ví d này trong
c samples/tictoc ca b cài Omnet++, nên bn có th th ngay lp tc
cách các ví d làm vic th nào. Tuy nhiên, bn s tìm thy nhing dn
hu bn thc s thc hành ít nhu tiên mô t  
Chú ý:
Chúng tôi gi s  ng bt b cài làm vic Omnet++. Chúng tôi
 s rng bn có mt kin thc tt v C++, và b
thuc vi vic phát trin C/C++ (chnh sa file ngun, dch, bt l
u hành ca bn. (u va ri là ngoài phm vi ca chúng tôi  - có
nhiu cung dn tu bn cn cp nht kin thc
 ngh s dng phát trin tích hp Omnet++ cho
vic chnh sa và xây dng các mô phng ca bn.
 làm các ví d d t c các code ngun s c nêu  
mà ch c nêu tên, bn s t tìm  c samples/tictoc.
Tài liu này và mô hình TicToc là mt phiên bc m rng bng dn
TicToc gc t Ahmet Sekercioglu (i hc Monash).
Ni dung:
I.Khởi đầu
II.Tăng cường thành 2-node TicToc
III.Chuyển thành một mạng thực tế hơn







I.Khởi đầu:
Sources: tictoc1.ned, txc1.cc, omnetpp.ini
Vì vùng ng dng ph bin nht ca Omnet++ là mô phng các mng truyn
thông, chúng ta s làm vi ch  này t vi bu, chúng ta bu
vi mt mng bao gm 2 node. Các node s làm vài vin: mt trong
các node s to mt packet, và 2 node s gi vic qua li cùng gói tin vào và ra.
Chúng ta g
 c bn thc hin mô phu tiên ca bn t u:
1.To mc làm vic gi là tictoc và cd (lnh cd ca dos) c
này
2.Mô t mng ví d ca bn bng vic to mt file topology. Mt file topology
là mnode ca mng và các liên kt gia chúng.
Bn có th to nó vi trình chnh sa bt tên
cho nó là tictoc1.ned:
//
// This file is part of an OMNeT++/OMNEST simulation example.
//
// Copyright (C) 2003 Ahmet Sekercioglu
// Copyright (C) 2003-2008 Andras Varga
//
// This file is distributed WITHOUT ANY WARRANTY. See the file
// `license' for details on this and other legal matters.
//


simple Txc1
{
gates:
input in;

output out;
}

//
// Two instances (tic and toc) of Txc1 connected both ways.
// Tic and toc will pass messages to one another.
//
network Tictoc1
{
submodules:


tic: Txc1;
toc: Txc1;
connections:
tic.out > { delay = 100ms; } > toc.in;
tic.in < { delay = 100ms; } < toc.out;
}
c tt nht là t i lên.  n nói:
-TicToc1 là mt mc tp hp t hai module con, tic và toc. Tic và toc là
các th hin ca cùng 1 kiu module gi là Txc1. Chúng ta kt ni cng ra ca
n cng vào cc l tr 100ms
vi c ng.
-Txc1 là mt kic nguyên t trong
ngôn ng Ned, và s t trong C++). Txc1 có 1 cng vào tên là in, và
mt cng ra tên là out.
3.Chúng ta ct chn Txc1. Vi
tr bi mt file C++ tên là txc1.cc:
//
// This file is part of an OMNeT++/OMNEST simulation example.

//
// Copyright (C) 2003 Ahmet Sekercioglu
// Copyright (C) 2003-2008 Andras Varga
//
// This file is distributed WITHOUT ANY WARRANTY. See the file
// `license' for details on this and other legal matters.
//

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


class Txc1 : public cSimpleModule
{
protected:
// The following redefined virtual function holds the algorithm.
virtual void initialize();
virtual void handleMessage(cMessage *msg);
};

// The module class needs to be registered with OMNeT++
Define_Module(Txc1);



void Txc1::initialize()
{
// Initialize is called at the beginning of the simulation.
// To bootstrap the tic-toc-tic-toc process, one of the modules needs
// to send the first message. Let this be `tic'.


// Am I Tic or Toc?
if (strcmp("tic", getName()) == 0)
{
// create and send first message on gate "out". "tictocMsg" is an
// arbitrary string which will be the name of the message object.
cMessage *msg = new cMessage("tictocMsg");
send(msg, "out");
}
}

void Txc1::handleMessage(cMessage *msg)
{
// The handleMessage() method is called whenever a message arrives
// at the module. Here, we just send it to the other module, through
// gate `out'. Because both `tic' and `toc' does the same, the
message
// will bounce between the two.
send(msg, "out");
}
Kic mô t bi lp C++ : Txc1, cái này là mt lp
con t l       Omnet++ vi macro
c t cSimpleModule:
c triu gi t nhân mô phng: cái
u tiên ch duy nht 1 ln, còn cái th hai thì khi mn ti mt
module.
Trong initialize() chúng ta to mp (cMessage), và gi nó
ra ngoài qua cng out. Vì cc kt nn cng ra ca module khác,
nhân mô phng s      n module khác trong
handleMessage()sau truyn thông tr  liên kt trong file Ned.

Module khác gi nó quay li (v tr 100ms), nên nó s có h qu u
ng ping-pong liên tc.
       kin (các b nh thi,
c môt t tt c bng cMessage( hoc các lp con ca nó)
trong Omnet++. Sau khi bn gi hoc lên lch cho chúng, chúng s c t
chc bi nhân mô ph kit l kin


n khi thi gian cc phân phn các
module thông qua handleMessage().
Chú ý rng  u kin dng cho mô phng này: nó s tip tn
mãi mãi. Bn có th dng nó t giao dii dùng. (Bn có th nh
thi gian gii hn cho mô phng hoc gii hn thi gian cho CPU trong file cu
 ng dn này).
4. Chúng ta bây gi to Makefile cái này s giúp chúng ta dch và liên kt
      to file tictoc có kh  y:
$ opp_makemake
Lnh này s phi to ra mt makefc làm vic tictoc:
5.Gi ta dch và liên kt mô phu tiên ca chúng ta bng vic dùng lnh
make:
$ make
6.Nu bn bu chy bây gi, nó s gii thích nó không th tìm thy file
omnetpp.ini, nên bn phi to my. omnetpp.ini nói v
trình mô phng cái mng bn mun mô phng (vâng, 1 vài mng có th sng
ng), bn có th  cho mô
nh chính xác các seed cho vic sinh s ng
To mt file omnetpp.ini r
[General]
Network=Tictoc1
Tictoc2 và cho tt c c sau  file omnetpp.ini sau:

# This file is shared by all tictoc simulations.
# Lines beginning with `#' are comments

[General]
# nothing here

[Config Tictoc1]
network = Tictoc1

[Config Tictoc2]


network = Tictoc2

[Config Tictoc3]
network = Tictoc3

[Config Tictoc4]
network = Tictoc4
Tictoc4.toc.limit = 5

[Config Tictoc5]
network = Tictoc5
**.limit = 5

[Config Tictoc6]
network = Tictoc6

[Config Tictoc7]
network = Tictoc7

# argument to exponential() is the mean; truncnormal() returns values
from
# the normal distribution truncated to nonnegative values
Tictoc7.tic.delayTime = exponential(3s)
Tictoc7.toc.delayTime = truncnormal(3s,1s)

[Config Tictoc8]
network = Tictoc8

[Config Tictoc9]
network = Tictoc9

[Config Tictoc10]
network = Tictoc10

[Config Tictoc11]
network = Tictoc11

[Config Tictoc12]
network = Tictoc12

[Config Tictoc13]
network = Tictoc13

7.Khi b    c trên, bn chy mô phng bng lnh này:
$ ./tictoc
Và hi vng bc ca s mô phng Omnet++


8.n nút Run trên thanh công c  khng mô phng. Bn s thy cais cách

p vi nhau.

Công c ca s chính hin th thi gian mô phng. Thi gian này là thi gian o,
không có gì n thi gian thng h ng) v
y. Thc s, s giây bn có th chy trong th gii thc ph thuc
cao vào t ca phn cng ca bn và thng
 phc tp ca chính mô hình mô phng.
Chú ý rng thi gian mô phng cho m x lí tin nhn là bng 0. Ch
nhng th i gian mô phng qua l tr
trong các kt ni.
9.Bn có th làm chnh hoi thanh cun 
trên nh ca s  ha. Bn có th dng môt hình bng  n
nút stop trên toolbar), chy tc (f4), chay nó vi f5 hoc thoát khi hình
nh (f6).
10.Bn có th thoát kh    ng bng vic click vào biu
ng close hoc la chn File|Exit



II.Bổ sung thêm cho 2 node TicToc:
Bước 2: thêm ảnh đồ họa, và thêm đầu ra gỡ lỗi
Sources: tictoc2.ned, txc2.cc, omnetpp.ini
               u
 file images/block/routing.png) và tô nó màu tía cho
tic và vàng cho toc. Vic bng vic thêm chui hin th n file
NED. Th i= trong chui hin th nh icon.
// "block/routing" icon to the simple module. All submodules of type
// Txc2 will use this icon by default
//
simple Txc2

{
parameters:
@display("i=block/routing"); // add a default icon
gates:
input in;
output out;
}

//
// Make the two module look a bit different with colorization effect.
// Use cyan for `tic', and yellow for `toc'.
//
network Tictoc2
{
submodules:
tic: Txc2 {
parameters:
@display("i=,cyan"); // do not change the icon (first arg
of i=) just colorize it
}
toc: Txc2 {
parameters:
@display("i=,gold"); // here too
}
connections:

Bn s thy kt qu 




nh s p g li cho Txc1 bng
vic chuy        
\

EV<<-\
Khi bn chy mô phng trong giao din Tkenv c
xut hin trên ca s n:

Bn có th m mt dãy các ca s u ra cho tic và toc bng vic n chut phi
trên bing và la chn module output t menu. Tin ích này s hu ích


khi bn có mt môt hình và bn ch p ghi li ca module c
th 

Bước 3: thêm một biến trạng thái
Sources: tictoc3.ned, txc3.cc, omnetpp.ini
c này chúng ta thêm mt b p sau
i.
Chúng ta thêm b p:
class Txc3 : public cSimpleModule
{
private:
int counter; // Note the counter here

protected:
Chúng ta thit lp bin giá tr là 10 trong initialize() và gim trong
           m v 0, mô
phng s ht s kin và hy.
Chú ý dòng:

WATCH(counter);
Dòn trong mà ngun: vic này làm có th nhìn thy giá tr b m trong Tkenv.
t vào bing ca chn ni dung trang Content t
ca s theo dõi:



Khi bn tip tc chy mô phng, bn có th thy b m gim dn tn khi
n 0.
Bước 4: thêm các tham số module
Sources: tictoc4.ned, txc4.cc, omnetpp.ini
c này bn s h nhp thêm các tham s n mô phng:
chúi bin trng thái thành mt tham s và thêm mt tham s boolean
 quynh module s gu ra ngoài na hay không.
Các tham s module phc khai báo trong file Ned. Kiu d liu có th là
s, chui, bool, ho
simple Txc4
{
parameters:
bool sendMsgOnInit = default(false); // whether the module should
send out a message on initialization
int limit = default(2); // another parameter with a default
value
@display("i=block/routing");
gates:
i chnh l c tham s trong initialize() và gán
nó vào bin b m.

Chúng ta có th s dng tham s th  quynh xem có gp
u hay không:



if (par("sendMsgOnInit").boolValue() == true)

Gi chúng ta gán giá tr cho các tham s trong file Ned hoc t omnetpp.ini.
Vic gán giá tr n có th  mc
nh cho các tham s nu bn s d
ng hp này bn có th hoc thit lp giá tr ca các tham s trong
omnetpp.ini hoc s dng giá tr mp bi file NED.
 t tham s trong file NED:
network Tictoc4
{
submodules:
tic: Txc4 {
parameters:
sendMsgOnInit = true;
@display("i=,cyan");
}
toc: Txc4 {
parameters:
sendMsgOnInit = false;
@display("i=,gold");
}
connections:
và tham s còn li trong omnetpp.ini
Tictoc4.toc.limit = 5
Chú ý rng vì omnetpp.ini h tr nhiu loi kí t i din, và các tham s 
gán t các file NED có s i trên file omnetpp.ini, chúng ta có th
s d
Tictoc4.t*c.limit=5

Hoc:
Tictoc4.*.limit=5
Hoc thm chí:
**.limit=5
Cho cùng kt qu (s khác nhau gia * và ** là * s không biu th du chm
còn ** thì có).


Trong Tkenv, bn có th theo dõi các tham s module hoc trong cây object 
bên tay trái ca màn hình chính hoc trong trang các tham s ca module theo
c m thông qua ving module).
Bước 5: sử dụng thừa kế
N nhn thy rng tic và toc ch khác gia giá tr các
tham s và chui hin th ca chúng. Chúng ta có th to ra mt kiu module
mi bng vic kt tha t mnh hot vài
các tham s cng hp ca chúng ta, ta s ly hai kiu module
n (tic và toc). G s dng các ki
kiu module con trong mng.
Vic ly t mn ti khá d:
simple Txc5
{
parameters:
bool sendMsgOnInit = default(false);
int limit = default(2);
@display("i=block/routing");
gates:
input in;
output out;
}
nh các giá tr tham s và thêm vài

thuc tính hin th
simple Tic5 extends Txc5
{
parameters:
@display("i=,cyan");
sendMsgOnInit = true; // Tic modules should send a message on
init
}
Module Toc ging v giá tr tham s:
simple Toc5 extends Txc5
{
parameters:
@display("i=,gold");
sendMsgOnInit = false; // Toc modules should NOT send a message
on init
}


c k tha t .
Ch khi n mi, ta có th s dt kiu
module con trong mng ca chúng ta:
network Tictoc5
{
submodules:
tic: Tic5; // the limit parameter is still unbound here. We will
get it from the ini file
toc: Toc5;
connections:
n có th thng gi ngu. Vic k
tha cho phép bn s dng các kiu ph bin trong mng ca bn và tránh xa

a và thit lp tham s.
Bước 6: việc mô hình xử lí trễ
Sources: tictoc6.ned, txc6.cc, omnetpp.ini
c, tic và toc gi tr lp nhc ngay
lp tc.   thêm ít thi gian: tic và toc gip vi 1 giây mô
ph c khi gi nó tr li. Th     c bi vic
module gc gi là self-
message.
Ta thêm hai bin l nh các thông
p ta s dng thp x lí tr ng.
class Txc6 : public cSimpleModule
{
private:
cMessage *event; // pointer to the event object which we'll use for
timing
cMessage *tictocMsg; // variable to remember the message until we
send it back

public:
Chúng ta gi self-message vi hàm scheduleAt(), ch c phân phi
c li ti module:
scheduleAt(simTime()+1.0, event);


Trong handleMessage() chúng ta phi so sánh mp mn thông
qua cng vào có là self-message quay li hay không.  ùng:
if (msg==event)
 vit:
if (msg->isSelfMessage())
c.

Chúng tôi b  gi cho mã ngun nh.
Kt qu ca vic chy mô phng có th 

Bước 7: các số và tham số ngẫu nhiên
Sources: tictoc8.ned, txc7.cc, omnetpp.ini
c này chúng tôi s gii thiu các s ng
tr t n mt giá tr ngu nhiên, vic này có th lp t file Ned hoc t
omnetpp.ini. Các tham s module có th tr li các bin ngu nhiên. Tuy nhiên,
 c các tham s trong handleMessage() mi khi
ta s dng nó.



// The "delayTime" module parameter can be set to values like
// "exponential(5)" (tictoc7.ned, omnetpp.ini), and then here
// we'll get a different delay every time.
simtime_t delay = par("delayTime");

EV << "Message arrived, starting to wait " << delay << "
secs \n";
tictocMsg = msg;
scheduleAt(simTime()+delay, event);
Thêm na, ta s làm mp vi mt xác sut nh:
if (uniform(0,1) < 0.1)
{
EV << "\"Losing\" message\n";
delete msg;
}
Chúng ta gán các tham s trong omnetpp.ini:
Tictoc7.tic.delayTime = exponential(3s)

Tictoc7.toc.delayTime = truncnormal(3s,1s)
Bn có th c gng nhiu ln bn chy li mô phng (hoc khng nó), bn
s nhn chính xác cùng các kt qu. Vic này bi vì Omnet++ s dng thut
nh (m sinh các s ngu nhiê và
khi to nó cùng các seed- ht nhân. Vic này quan trng cho vic mô phng
thc t. Bn có th th vi các seed khác nu bn thêm dòng sau vào
omnetpp.ini:
[General]
seed-0-mt=532569 # or any other 32-bit value

Bước 8: timeout và việc hủy bộ định thời
Sources: tictoc8.ned, txc8.cc, omnetpp.ini
 c mc gi vic mô hình hóa các giao thc mng, chúng
ta bii mô hình ca chúng ta sang mô phng d
các lp tic và toc. Kch bn là gic: tic và toc s tung các
p cho nhau. Tuy nhiên, toc s p vi mt xác sut khác
không, và trong trng h phi gi li nó.
a toc:


void Toc8::handleMessage(cMessage *msg)
{
if (uniform(0,1) < 0.1)
{
EV << "\"Losing\" message.\n";
bubble("message lost"); // making animation more informative
delete msg;
}
else
Nhìn vào li gi bubble() trong code, toc s hin th mt li gi khi nó mt

p:

Tic thì s khng mt b nh thi khi nó gi mt p. Khi thi gian
ht hn, chúng ta gi s rp b mt và gi li cho toc. Nu tr li
cn, thì b nh thi phi b hy. B nh thi s là mt self-message.
scheduleAt(simTime()+timeout, timeoutEvent);
Vic hy b nh thi s c hoàn thành vi li gi cancelEvent().
cancelEvent(timeoutEvent);

Bước 9: Gửi lại cùng thông điệp
Sources: tictoc9.ned, txc9.cc, omnetpp.ini
c này chúng ta chnh lo li gói tin khác
nu chúng ta cn gi li. Vic này n vì gói tin không cha nhi


ng thc hin gi mt bn copy ca gói tin g có th gi l
không cn phi xây dng nó li ln na.
Cái ta làm   gói tin gc và gi ch các bn copy ca nó. Ta xóa bn
gc  làm vic nó d  xác thc mô hình,
chúng ta s gp mp vi mt dãy s p.
 ng thành 2 hàm
mi, generateNewMessage() và sendCopyOf() và gi chúng t
handleMessage().
C th:
cMessage *Tic9::generateNewMessage()
{
// Generate a message with a different name every time.
char msgname[20];
sprintf(msgname, "tic-%d", ++seq);
cMessage *msg = new cMessage(msgname);

return msg;
}
void Tic9::sendCopyOf(cMessage *msg)
{
// Duplicate message and send the copy.
cMessage *copy = (cMessage *) msg->dup();
send(copy, "out");
}

III.Chuyển thành một mạng thực tế hơn
Bước 10: làm việc với nhiều hơn 2 nodes
Sources: tictoc10.ned, txc10.cc, omnetpp.ini
Bây chúng ta s làm mc ln: to mt vài module tic và kt ni chúng
thành mt mng. Ri chúng ta cho chúng làm vi  n: mt trong các
node sinh mp, p cho nhau theo các
ng ngnh t c.
File Ned s cn mu tiên cho tt c, module Txc s cn có nhiu
cng vào và ra:



simple Txc10
{
parameters:
@display("i=block/routing");
gates:
input in[]; // declare in[] and out[] to be vector gates
output out[];
}
Di các cng thành vecto cng. Kích c ca vecto (s các cng) s

 s d xây dng mng.
network Tictoc10
{
submodules:
tic[6]: Txc10;
connections:
tic[0].out++ > { delay = 100ms; } > tic[1].in++;
tic[0].in++ < { delay = 100ms; } < tic[1].out++;

tic[1].out++ > { delay = 100ms; } > tic[2].in++;
tic[1].in++ < { delay = 100ms; } < tic[2].out++;

tic[1].out++ > { delay = 100ms; } > tic[4].in++;
tic[1].in++ < { delay = 100ms; } < tic[4].out++;

tic[3].out++ > { delay = 100ms; } > tic[4].in++;
tic[3].in++ < { delay = 100ms; } < tic[4].out++;

tic[4].out++ > { delay = 100ms; } > tic[5].in++;
tic[4].in++ < { delay = 100ms; } < tic[5].out++;
}

 t vector module và kt ni chúng.
Kt qu hình trng mng gi



Trong phiên bn này, tic[0] s  gi loanh quanh. Vic này
c thc hin trong initialize(), v ca hàm getIndex() s tr li ch
s ca module trong vecto.

Phn chính ca code là hàm forwardMessage() cái chúng ta triu gi t
handleMessage() khi mp ti mt node. Nó to mt s cng ngu
c ca vecto cng) và gp ra ngoài trên cng.
void Txc10::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 = gateSize("out");
int k = intuniform(0,n-1);

EV << "Forwarding message " << msg << " on port out[" << k << "]\n";
send(msg, "out", k);
}
n tic[3], handleMessage() ca nó s p.


C th  trong txc10.cc
Bước 11: Các kênh và định nghĩa kiểu inner
Sources: tictoc11.ned, txc11.cc, omnetpp.ini
ng mi ca chúng ta khá phc tc bit là phn kt
ni. Th n. Th u tiên ta nhn thy các kt nng s
dng cùng tham s tr delay. Có th to các kiu cho các kt nc
gi là các kênh-channel) gin. Chúng ta có th to mt
kiu kênh ch ra tham s tr và ta s s dng kit c các kt ni
trong mng.
network Tictoc11
{
types:
channel Channel extends ned.DelayChannel {
delay = 100ms;

}
submodules:

u mng m
mng bng vic thêm mt phn types. Phu này ch nhìn thy
c bên trong mc gi là mt kin có
th s du types nu bn thy cn.
o kênh bng vinh xây dng sn DelayChannel
(kênh xây sn có th c tìm th
dng tên ki ned.DelayChannel) sau t khóa extends.
Bây gi hãy kim tra phi th nào.
connections:
tic[0].out++ > Channel > tic[1].in++;
tic[0].in++ < Channel < tic[1].out++;

tic[1].out++ > Channel > tic[2].in++;
tic[1].in++ < Channel < tic[2].out++;

tic[1].out++ > Channel > tic[4].in++;
tic[1].in++ < Channel < tic[4].out++;

tic[3].out++ > Channel > tic[4].in++;


tic[3].in++ < Channel < tic[4].out++;

tic[4].out++ > Channel > tic[5].in++;
tic[4].in++ < Channel < tic[5].out++;
}


n th ra tên kênh trong pht ni. Vic
này cho phép d i tham s tr ca toàn mng.
Bước 12: Sử dụng kết nối hai chiều:
Sources: tictoc12.ned, txc12.cc, omnetpp.ini
Nu chúng ta km tra phn connections nhit chút, chúng ta s nhn
ra mi cc kt ni vi 2 kt ni. Mng mt kt ni. Omnet++ 4
h tr kt ni hai chiu, gi ta s dng chúng.
u tiên, chúng ta phng hai chiu (hay gi là inout) thay cho
dãy các c dng 
simple Txc12
{
parameters:
@display("i=block/routing");
gates:
inout gate[]; // declare two way connections
}
Phn connections mi s nhìn ging th này:
connections:
tic[0].gate++ < > Channel < > tic[1].gate++;
tic[1].gate++ < > Channel < > tic[2].gate++;
tic[1].gate++ < > Channel < > tic[4].gate++;
tic[3].gate++ < > Channel < > tic[4].gate++;
tic[4].gate++ < > Channel < > tic[5].gate++;
}

nh sa tên nên chúng ta phi chnh sa vi
code C++:




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);
}

Chú ý: hu t c bit $i và $o theo sau tên cng cho phép chúng ta s dng
vi dãy kt ni hai chiu.
Bước 13: định nghĩa lớp message của riêng ta
Sources: tictoc13.ned, tictoc13.msg, txc13.cc, omnetpp.ini
a ch  s không còn là c nh vi tic[3] na  chúng ta
to mu nhiên, và chúng ta s a ch p.
Cách tt nht là to lp con ca la ch  d
liu thành viên. Vic code th công các lng t nht bi vì nó
ng có nhiu code quy chun, nên chúng tôi cho omnet++ sinh các lp t
ng cho chúng ta. Lp mô t trong tictoc13.msg:
message TicTocMsg13
{
int source;
int destination;
int hopCount = 0;
}
Makefile thit lp cho vic biên dc triu gi

và nó sinh tictoc_m.h và tictoc13_m.cc t p. Chúng s cha
mt lp TicTocMsg13 sinh ra t lp cMessage. Lp s có cc set
và get cho mng.
Chúng tôi s gn code C++ ca chúng ta, và chúng ta có th
s dp khác.


#include "tictoc13_m.h"
Ví d, chúng ta s d to thông
p và thêm giá tr ng:
TicTocMsg13 *msg = new TicTocMsg13(msgname);
msg->setSource(src);
msg->setDestination(dest);
return msg;
u ging th này:
void Txc13::handleMessage(cMessage *msg)
{
TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);

if (ttmsg->getDestination()==getIndex())
i gn handleMessage(), chúng ta nh
mt con tr lp cMessage. Tuy nhiên, chúng ta ch có th truy cng
c      u chúng ta ép kiu msg sang
TicTocMsg13 *.
n mt gi c gi là ép ki ng dynamic_cast.  
chúng ta s dc cung cp bi Omnet++: nó th ép
kiu con tr thông qua dynamic_cast, và nu nó tht bi nó dng mô phng
vi mt thông báo li, gi

Trong dòng tip theo, chúng ta kia ch a ch ca node

hay không. Hàm thành viên getIndex() tr v ch s ca module trong vecto
 tic: Txc13[6], nên các
node ca ch 0 5).
 to mô hình chn ta nó, node
 sinh mp khác vi ma ch u nhiên, và c th.
: txc13.cc


Khi bn chay mô hình nó s ging th này:

Bn có th b m ca s theo dõi chúng (bn có
th dng mô phng, hoc làm tht nhanh khi x lí vi chut). Ca s theo dõi
hin th   các thông tin h     p có th xem 
trang content:

×