Hướng dẫn TicToc cho Omnet++
ng dn ngng dn v Omnet++ giúp bn do qua mt ví d cho
vic mô hình hóa và mô phng, cho bn thy mt s ng dùng
vi các tin ích Omnet++.
Bài này da trên ví d mô phng TicToc, bn có th tìm thy ví d này trong
c samples/tictoc ca b cài Omnet++, nên bn có th th ngay lp tc
cách các ví d làm vic th nào. Tuy nhiên, bn s tìm thy nhing dn
hu bn thc s thc hành ít nhu tiên mô t
Chú ý:
Chúng tôi gi s ng bt b cài làm vic Omnet++. Chúng tôi
s rng bn có mt kin thc tt v C++, và b
thuc vi vic phát trin C/C++ (chnh sa file ngun, dch, bt l
u hành ca bn. (u va ri là ngoài phm vi ca chúng tôi - có
nhiu cung dn tu bn cn cp nht kin thc
ngh s dng phát trin tích hp Omnet++ cho
vic chnh sa và xây dng các mô phng ca bn.
làm các ví d d t c các code ngun s c nêu
mà ch c nêu tên, bn s t tìm c samples/tictoc.
Tài liu này và mô hình TicToc là mt phiên bc m rng bng dn
TicToc gc t Ahmet Sekercioglu (i hc Monash).
Ni 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 dng ph bin nht ca Omnet++ là mô phng các mng truyn
thông, chúng ta s làm vi ch này t vi bu, chúng ta bu
vi mt mng bao gm 2 node. Các node s làm vài vin: mt trong
các node s to mt packet, và 2 node s gi vic qua li cùng gói tin vào và ra.
Chúng ta g
c bn thc hin mô phu tiên ca bn t u:
1.To mc làm vic gi là tictoc và cd (lnh cd ca dos) c
này
2.Mô t mng ví d ca bn bng vic to mt file topology. Mt file topology
là mnode ca mng và các liên kt gia chúng.
Bn có th to nó vi trình chnh sa bt 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 tt nht là t i lên. n nói:
-TicToc1 là mt mc tp hp t hai module con, tic và toc. Tic và toc là
các th hin ca cùng 1 kiu module gi là Txc1. Chúng ta kt ni cng ra ca
n cng vào cc l tr 100ms
vi c ng.
-Txc1 là mt kic nguyên t trong
ngôn ng Ned, và s t trong C++). Txc1 có 1 cng vào tên là in, và
mt cng ra tên là out.
3.Chúng ta ct chn Txc1. Vi
tr bi mt 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");
}
Kic mô t bi lp C++ : Txc1, cái này là mt lp
con t l Omnet++ vi macro
c t cSimpleModule:
c triu gi t nhân mô phng: cái
u tiên ch duy nht 1 ln, còn cái th hai thì khi mn ti mt
module.
Trong initialize() chúng ta to mp (cMessage), và gi nó
ra ngoài qua cng out. Vì cc kt nn cng ra ca module khác,
nhân mô phng s n module khác trong
handleMessage()sau truyn thông tr liên kt trong file Ned.
Module khác gi nó quay li (v tr 100ms), nên nó s có h qu u
ng ping-pong liên tc.
kin (các b nh thi,
c môt t tt c bng cMessage( hoc các lp con ca nó)
trong Omnet++. Sau khi bn gi hoc lên lch cho chúng, chúng s c t
chc bi nhân mô ph kit l kin
n khi thi gian cc phân phn các
module thông qua handleMessage().
Chú ý rng u kin dng cho mô phng này: nó s tip tn
mãi mãi. Bn có th dng nó t giao dii dùng. (Bn có th nh
thi gian gii hn cho mô phng hoc gii hn thi gian cho CPU trong file cu
ng dn này).
4. Chúng ta bây gi to Makefile cái này s giúp chúng ta dch và liên kt
to file tictoc có kh y:
$ opp_makemake
Lnh này s phi to ra mt makefc làm vic tictoc:
5.Gi ta dch và liên kt mô phu tiên ca chúng ta bng vic dùng lnh
make:
$ make
6.Nu bn bu chy bây gi, nó s gii thích nó không th tìm thy file
omnetpp.ini, nên bn phi to my. omnetpp.ini nói v
trình mô phng cái mng bn mun mô phng (vâng, 1 vài mng có th sng
ng), bn có th cho mô
nh chính xác các seed cho vic sinh s ng
To mt file omnetpp.ini r
[General]
Network=Tictoc1
Tictoc2 và cho tt 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, bn chy mô phng bng lnh này:
$ ./tictoc
Và hi vng bc ca s mô phng Omnet++
8.n nút Run trên thanh công c khng mô phng. Bn s thy cais cách
p vi nhau.
Công c ca s chính hin th thi gian mô phng. Thi gian này là thi gian o,
không có gì n thi gian thng h ng) v
y. Thc s, s giây bn có th chy trong th gii thc ph thuc
cao vào t ca phn cng ca bn và thng
phc tp ca chính mô hình mô phng.
Chú ý rng thi gian mô phng cho m x lí tin nhn là bng 0. Ch
nhng th i gian mô phng qua l tr
trong các kt ni.
9.Bn có th làm chnh hoi thanh cun
trên nh ca s ha. Bn có th dng môt hình bng n
nút stop trên toolbar), chy tc (f4), chay nó vi f5 hoc thoát khi hình
nh (f6).
10.Bn có th thoát kh ng bng vic click vào biu
ng close hoc la chn 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. Vic bng vic thêm chui hin th n file
NED. Th i= trong chui hin 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:
Bn s thy kt qu
nh s p g li cho Txc1 bng
vic chuy
\
Và
EV<<-\
Khi bn chy mô phng trong giao din Tkenv c
xut hin trên ca s n:
Bn có th m mt dãy các ca s u ra cho tic và toc bng vic n chut phi
trên bing và la chn module output t menu. Tin ích này s hu ích
khi bn có mt môt hình và bn ch p ghi li ca 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 mt 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 thit lp bin giá tr là 10 trong initialize() và gim trong
m v 0, mô
phng s ht s kin và hy.
Chú ý dòng:
WATCH(counter);
Dòn trong mà ngun: vic này làm có th nhìn thy giá tr b m trong Tkenv.
t vào bing ca chn ni dung trang Content t
ca s theo dõi:
Khi bn tip tc chy mô phng, bn có th thy b m gim dn tn khi
n 0.
Bước 4: thêm các tham số module
Sources: tictoc4.ned, txc4.cc, omnetpp.ini
c này bn s h nhp thêm các tham s n mô phng:
chúi bin trng thái thành mt tham s và thêm mt tham s boolean
quynh module s gu ra ngoài na hay không.
Các tham s module phc khai báo trong file Ned. Kiu d liu có th là
s, chui, 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 chnh l c tham s trong initialize() và gán
nó vào bin b m.
Chúng ta có th s dng tham s th quynh xem có gp
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 hoc t omnetpp.ini.
Vic gán giá tr n có th mc
nh cho các tham s nu bn s d
ng hp này bn có th hoc thit lp giá tr ca các tham s trong
omnetpp.ini hoc s dng giá tr mp bi 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 li trong omnetpp.ini
Tictoc4.toc.limit = 5
Chú ý rng vì omnetpp.ini h tr nhiu loi kí t i din, 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
Hoc:
Tictoc4.*.limit=5
Hoc thm chí:
**.limit=5
Cho cùng kt qu (s khác nhau gia * và ** là * s không biu th du chm
còn ** thì có).
Trong Tkenv, bn có th theo dõi các tham s module hoc trong cây object
bên tay trái ca màn hình chính hoc trong trang các tham s ca module theo
c m thông qua ving module).
Bước 5: sử dụng thừa kế
N nhn thy rng tic và toc ch khác gia giá tr các
tham s và chui hin th ca chúng. Chúng ta có th to ra mt kiu module
mi bng vic kt tha t mnh hot vài
các tham s cng hp ca chúng ta, ta s ly hai kiu module
n (tic và toc). G s dng các ki
kiu module con trong mng.
Vic ly t mn ti 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
thuc tính hin th
simple Tic5 extends Txc5
{
parameters:
@display("i=,cyan");
sendMsgOnInit = true; // Tic modules should send a message on
init
}
Module Toc ging 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 tha t .
Ch khi n mi, ta có th s dt kiu
module con trong mng ca 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 thng gi ngu. Vic k
tha cho phép bn s dng các kiu ph bin trong mng ca bn và tránh xa
a và thit lp tham s.
Bước 6: việc mô hình xử lí trễ
Sources: tictoc6.ned, txc6.cc, omnetpp.ini
c, tic và toc gi tr lp nhc ngay
lp tc. thêm ít thi gian: tic và toc gip vi 1 giây mô
ph c khi gi nó tr li. Th c bi vic
module gc gi là self-
message.
Ta thêm hai bin l nh các thông
p ta s dng thp 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 gi self-message vi hàm scheduleAt(), ch c phân phi
c li ti module:
scheduleAt(simTime()+1.0, event);
Trong handleMessage() chúng ta phi so sánh mp mn thông
qua cng vào có là self-message quay li hay không. ùng:
if (msg==event)
vit:
if (msg->isSelfMessage())
c.
Chúng tôi b gi cho mã ngun nh.
Kt qu ca vic chy mô phng 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 gii thiu các s ng
tr t n mt giá tr ngu nhiên, vic này có th lp t file Ned hoc t
omnetpp.ini. Các tham s module có th tr li các bin ngu nhiên. Tuy nhiên,
c các tham s trong handleMessage() mi khi
ta s dng 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 na, ta s làm mp vi mt xác sut 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)
Bn có th c gng nhiu ln bn chy li mô phng (hoc khng nó), bn
s nhn chính xác cùng các kt qu. Vic này bi vì Omnet++ s dng thut
nh (m sinh các s ngu nhiê và
khi to nó cùng các seed- ht nhân. Vic này quan trng cho vic mô phng
thc t. Bn có th th vi các seed khác nu bn 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 mc gi vic mô hình hóa các giao thc mng, chúng
ta bii mô hình ca chúng ta sang mô phng d
các lp tic và toc. Kch bn là gic: tic và toc s tung các
p cho nhau. Tuy nhiên, toc s p vi mt xác sut khác
không, và trong trng h phi gi li 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 li gi bubble() trong code, toc s hin th mt li gi khi nó mt
p:
Tic thì s khng mt b nh thi khi nó gi mt p. Khi thi gian
ht hn, chúng ta gi s rp b mt và gi li cho toc. Nu tr li
cn, thì b nh thi phi b hy. B nh thi s là mt self-message.
scheduleAt(simTime()+timeout, timeoutEvent);
Vic hy b nh thi s c hoàn thành vi li gi 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 chnh lo li gói tin khác
nu chúng ta cn gi li. Vic này n vì gói tin không cha nhi
ng thc hin gi mt bn copy ca gói tin g có th gi l
không cn phi xây dng nó li ln na.
Cái ta làm gói tin gc và gi ch các bn copy ca nó. Ta xóa bn
gc làm vic nó d xác thc mô hình,
chúng ta s gp mp vi mt dãy s p.
ng thành 2 hàm
mi, generateNewMessage() và sendCopyOf() và gi 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 mc ln: to mt vài module tic và kt ni chúng
thành mt mng. Ri chúng ta cho chúng làm vi n: mt trong các
node sinh mp, p cho nhau theo các
ng ngnh t c.
File Ned s cn mu tiên cho tt c, module Txc s cn có nhiu
cng vào và ra:
simple Txc10
{
parameters:
@display("i=block/routing");
gates:
input in[]; // declare in[] and out[] to be vector gates
output out[];
}
Di các cng thành vecto cng. Kích c ca vecto (s các cng) s
s d xây dng mng.
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à kt ni chúng.
Kt qu hình trng mng gi
Trong phiên bn này, tic[0] s gi loanh quanh. Vic này
c thc hin trong initialize(), v ca hàm getIndex() s tr li ch
s ca module trong vecto.
Phn chính ca code là hàm forwardMessage() cái chúng ta triu gi t
handleMessage() khi mp ti mt node. Nó to mt s cng ngu
c ca vecto cng) và gp ra ngoài trên cng.
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() ca 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 mi ca chúng ta khá phc tc bit là phn kt
ni. Th n. Th u tiên ta nhn thy các kt nng s
dng cùng tham s tr delay. Có th to các kiu cho các kt nc
gi là các kênh-channel) gin. Chúng ta có th to mt
kiu kênh ch ra tham s tr và ta s s dng kit c các kt ni
trong mng.
network Tictoc11
{
types:
channel Channel extends ned.DelayChannel {
delay = 100ms;
}
submodules:
u mng m
mng bng vic thêm mt phn types. Phu này ch nhìn thy
c bên trong mc gi là mt kin có
th s du types nu bn thy cn.
o kênh bng vinh xây dng sn DelayChannel
(kênh xây sn có th c tìm th
dng tên ki ned.DelayChannel) sau t khóa extends.
Bây gi hãy kim tra phi 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 pht ni. Vic
này cho phép d i tham s tr ca toàn mng.
Bước 12: Sử dụng kết nối hai chiều:
Sources: tictoc12.ned, txc12.cc, omnetpp.ini
Nu chúng ta km tra phn connections nhit chút, chúng ta s nhn
ra mi cc kt ni vi 2 kt ni. Mng mt kt ni. Omnet++ 4
h tr kt ni hai chiu, gi ta s dng chúng.
u tiên, chúng ta phng hai chiu (hay gi là inout) thay cho
dãy các c dng
simple Txc12
{
parameters:
@display("i=block/routing");
gates:
inout gate[]; // declare two way connections
}
Phn connections mi s nhìn ging 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 sa tên nên chúng ta phi chnh sa vi
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ú ý: hu t c bit $i và $o theo sau tên cng cho phép chúng ta s dng
vi dãy kt ni hai chiu.
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 vi tic[3] na chúng ta
to mu nhiên, và chúng ta s a ch p.
Cách tt nht là to lp con ca la ch d
liu thành viên. Vic code th công các lng t nht bi vì nó
ng có nhiu code quy chun, nên chúng tôi cho omnet++ sinh các lp t
ng cho chúng ta. Lp mô t trong tictoc13.msg:
message TicTocMsg13
{
int source;
int destination;
int hopCount = 0;
}
Makefile thit lp cho vic biên dc triu gi
và nó sinh tictoc_m.h và tictoc13_m.cc t p. Chúng s cha
mt lp TicTocMsg13 sinh ra t lp cMessage. Lp s có cc set
và get cho mng.
Chúng tôi s gn code C++ ca chúng ta, và chúng ta có th
s dp khác.
#include "tictoc13_m.h"
Ví d, chúng ta s d to thông
p và thêm giá tr ng:
TicTocMsg13 *msg = new TicTocMsg13(msgname);
msg->setSource(src);
msg->setDestination(dest);
return msg;
u ging th này:
void Txc13::handleMessage(cMessage *msg)
{
TicTocMsg13 *ttmsg = check_and_cast<TicTocMsg13 *>(msg);
if (ttmsg->getDestination()==getIndex())
i gn handleMessage(), chúng ta nh
mt con tr lp cMessage. Tuy nhiên, chúng ta ch có th truy cng
c u chúng ta ép kiu msg sang
TicTocMsg13 *.
n mt gi c gi là ép ki ng dynamic_cast.
chúng ta s dc cung cp bi Omnet++: nó th ép
kiu con tr thông qua dynamic_cast, và nu nó tht bi nó dng mô phng
vi mt thông báo li, gi
Trong dòng tip theo, chúng ta kia ch a ch ca node
hay không. Hàm thành viên getIndex() tr v ch s ca module trong vecto
tic: Txc13[6], nên các
node ca ch 0 5).
to mô hình chn ta nó, node
sinh mp khác vi ma ch u nhiên, và c th.
: txc13.cc
Khi bn chay mô hình nó s ging th này:
Bn có th b m ca s theo dõi chúng (bn có
th dng mô phng, hoc làm tht nhanh khi x lí vi chut). Ca s theo dõi
hin th các thông tin h p có th xem
trang content: