Message và Packet

Một phần của tài liệu Giới thiệu về omnet++ và các vấn đề liên quan (Trang 54 - 55)

5. MODULE ĐƠN GIẢN

6.1.Message và Packet

6.1.1. Lp cMessage

cMessage là một lớp trung tâm của OMNeT++. Đối tượng của lớp cMessage và các lớp con của nó có thể mô hình hoá được rất nhiều đối tượng như các message, các gói tin (packet), frame, cell, bit, các tín hiệu truyền trong mạng, các thực thể truyền trong một hệ thống...

Thuộc tính

Một đối tượng của lớp cMessage có một số thuộc tính, một số được sử dụng bởi phần nhân mô phỏng, một số khác được cung cấp cho người lập trình.

• Tên - name: thuộc tính là một chuỗi (const char *) mà người lập trình có thể sử dụng tuỳ ý. Tên của message xuất hiện ở rất nhiều nơi trong Tkenv và nên được chọn có ý nghĩa. Thuộc tính này kế thừa từ lớp cObject.

• Kiểu message - message kind: thuộc tính này chứa thông tin về kiểu của message.

• Độ dài - length (được tính theo bit): được sử dụng để tính độ trễ khi message được truyền thông qua một kết nối có tốc độ truyền dữ liệu được gán giá trị xác định.

• Cờ bit lỗi - bit error flag: thuộc tính này được thiết lập bằng true bởi phần nhân mô phỏng với xác suất bằng 1-(1-ber)length khi message được gửi thông qua một kết nối có tốc độ truyền dữ liệu xác định (ber).

• Quyền ưu tiên - priority: được sử dụng bởi phần nhân mô phỏng để sắp xếp các message trong danh sách hàng đợi (message queue - FES) có cùng thời gian tới.

• Mốc thời gian - time stamp: thuộc tính này cho phép người sử dụng đánh dấu thời gian ví dụ như đánh dấu thời điểm message được xếp vào hàng đợi hoặc được gửi lại.

• Các thuộc tính khác và các thành phần dữ liệu giúp cho người lập trình làm việc dễ dàng hơn như: danh sách tham số (parameter list), message đóng gói (encapsulated message), thông tin điều khiển (control info) và con trỏ ngữ cảnh (context pointer.

• Một số các thuộc tính chỉ đọc (read-only attribute) lưu giữ các thông tin về việc gửi message, các thông tin về các module, cổng nguồn và đích, thời gian gửi và thời gian tới của các message. Hầu hết các thuộc tính này đều được sử dụng bởi phần nhân mô phỏng khi các message nằm trong FES, tuy nhiên khi các module nhận được message, các thông tin này vẫn còn tồn tại.

Hàm khởi tạo của lớp cMessage có thể nhận một vài đối số. Thông thường, một đối tượng của lớp cMessage sẽ nhận vào hai đối số là tên (kiểu string) và kiểu message (kiểu int):

cMessage *msg = new cMessage("MessageName", msgKind);

Tất cả các đối số đều là tuỳ chọn, do đó khai báo một đối tượng như sau cũng hợp lệ cMessage *msg = new cMessage();

hay

cMessage *msg = new cMessage("MessageName");

Khi không có đối số, mặc định đối tượng mới tạo ra có tên là “” và kiểu là 0. Hàm tạo của lớp cMessage có thể nhận vào nhiều đối số hơn (length, priority, bit error flag), tuy nhiên để đặt giá trị cho các thuộc tính ta cũng không nhất thiết phải sử dụng hàm tạo. Ta có thể sử dụng hàm set...() để gán giá trị cho từng thuộc tính.

msg->setKind( kind ); msg->setLength( length ); msg->setPriority( priority ); msg->setBitError( err ); msg->setTimestamp(); msg->setTimestamp( simtime );

Ngoài ra ta có thể sử dụng các hàm sau để lấy giá trị của các tham số: int k = msg->kind();

int p = msg->priority(); int l = msg->length();

bool b = msg->hasBitError(); simtime_t t = msg->timestamp();

Nhân đôi message

Ta có thể thực hiện sao chép một message bằng cách: cMessage *copy = (cMessage *) msg->dup();

hoặc

cMessage *copy = new cMessage( *msg );

Cách này có thể áp dụng với bất kỳ một đối tượng nào trong OMNeT++. Message mới được tạo là một bản copy chính xác của message cũ, bao gồm cả các tham số...

Một phần của tài liệu Giới thiệu về omnet++ và các vấn đề liên quan (Trang 54 - 55)