Liên kết agent “ping” với OTcl

Một phần của tài liệu Bài tiểu luận môn hoc IP ứng dụng và bảo mật giới thiệu công cụ ns (Trang 71)

9. Agents

9.6.3. Liên kết agent “ping” với OTcl

Ta đã có các phương thức và cơ chế để thiết lập liên kết trong OTcl (Chapter 3). Phần này tóm lại các đặc tính cơ bản của chương trước, và mô tả các chức năng tối thiểu để tạo agent ping.

Có 3 hạng mục ta phải điều khiển liên kết agent với Otcl. Đầu tiên ta cần phải thiết lập một ánh xạ giữa tên OTcl cho lớp và đối tượng thật được tạo ra khi lớp đựoc yêu cầu trong OTcl. Việc này được thực hiện như sau:

static class ECHOClass : public TclClass { public:

ECHOClass() : TclClass("Agent/ECHO") {}

TclObject* create(int argc, const char*const* argv) {

Ở đây, một đối tượng tĩnh “class_echo” đã được tạo ra. Hàm khởi tạo của nó (được thực hiện ngay khi bộ mô phỏng chạy) đặt tên lớp “Agent/ECHO” vào không gian tên OTcl. Định nghĩa của phương thức create() quy định cách đối tượng bóng C+ + được tạo ra khi trình biên dịch OTcl được chạy để tạo ra một đối tượng của lớp “Agent/ECHO”. Trong trường hợp này, nó trả về một đối tượng được cấp phát động. Đây là cách thông thường để tạo ra một đối bóng C++ mới.

Khi đã có một đối tượng mới, ta muốn liên kết các biến bộ phận C++ với các biến tương ứng trong không gian tên OTcl, như vậy việc truy nhập các biến OTcl thực tế là các biến bộ phận trong C++. Giả thiết ta muốn OTcl điều chỉnh khoảng thời gian gửi và kích thước gói. Việc này được hoàn thành trong hàm khởi tạo lớp:

ECHO_Agent::ECHO_Agent() : Agent(PT_ECHO) {

bind_time("interval_", &interval_); bind("packetSize_", &size_);

}

Ở đây, các biến C++ interval_ và size_ được liên kết với các biến OTcl tương ứng interval_ và packetSize_. Bất cứ thao thác đọc hay thay đổi đối với các biến OTcl nào cũng sẽ tạo ra trong một truy nhập tương ứng đến các biến C++. Chi tiết của các phương thức bind() đã được mô tả ở trên (Section 3.4.2). Hằng PT_ECHO bị hàm khởi tạo Agent() bỏ qua nên phương thức Agent::allocpkt() có thể thiết lập trường kiểu gói (Section 22.5). Trong trường hợp này, PT_ECHO biểu diễn một kiểu gói mới và phải định nghĩa trong ~ns/trace.h (Section 22.4).

Khi đối tượng đã được tạo ra và việc liên kết biến đã được thực hiện, ta có thể muốn tạo ra các phương thức thực hiện trong C++ mà có thể gọi từ OTcl (Section 3.4.4). Các phương thức này điều khiển các chức năng khởi tạo, huỷ hoặc thay đổi. Trong ví dụ này, ta có thể khởi động agent từ OTcl sử dụng lệnh “start”. Thực hiện như sau:

int ECHO_Agent::command(int argc, const char*const* argv) { if (argc == 2) { if (strcmp(argv[1], "start") == 0) { timeout(0); return (TCL_OK); } }

return (Agent::command(argc, argv)); }

Ở đây, phương thức start() sẵn sàng để OTcl gọi hàm bộ phận C++ timeout(), hàm này khởi tạo việc tạo gói đầu tiên và định trình gói tiếp theo. Chú ý rằng lớp này rất đơn giản, nó thậm chí không có cách dừng lại.

Một phần của tài liệu Bài tiểu luận môn hoc IP ứng dụng và bảo mật giới thiệu công cụ ns (Trang 71)

Tải bản đầy đủ (DOC)

(88 trang)
w