NS2添加新的代理MyAgent

添加新的代理MyAgent:

① 编写c++源文件ex-linkage.cc,放在ns-allinone-2.35/ns-2.35中

② 修改Makefile文件(路径ns-allinone-2.35/ns-2.35/Makefile),将添加的目标文件ex-linkage.o增加到对象文件列表

     添加在这里(粗体为添加的)

 ...........

mcast/srm-ssm.o mcast/srm-topo.o \
routing/alloc-address.o routing/address.o \
ex-linkage.o \
$(LIB_DIR)int.Vec.o $(LIB_DIR)int.RVec.o \
$(LIB_DIR)dmalloc_support.o \
webcache/http.o webcache/tcp-simple.o webcache/pagepool.o \

 ...........

③ 重新编译ns,执行语句

cd ns-allinone-2.35/ns-2.35

make

④ 编写tcl测试脚本ex-linkage.tcl,放在ns-allinone-2.35/ns-2.35中,进行测试,执行语句

  ns ex-linkage.tcl


c++代码:

ex-linkage.cc

#include <stdio.h>

#include <string.h>

#include "agent.h"

class MyAgent : public Agent {

public:

MyAgent();

protected:

int command(int argc, const char*const* argv);

private:

int    my_var1;

double my_var2;

void   MyPrivFunc(void);

};

使用C++创建了一个新的网络对象类MyAgent

static class MyAgentClass : public TclClass {

public:

MyAgentClass() : TclClass("Agent/MyAgentOtcl") {}

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

return(new MyAgent());

}

} class_my_agent;

OTcl中创建MyAgent的实例MyAgentOtcl

MyAgent::MyAgent() : Agent(PT_UDP) {

bind("my_var1_otcl", &my_var1);

bind("my_var2_otcl", &my_var2);

}

 

C++变量导出至OTcl,这样就可以在tcl模拟脚本中对MyAgent变量进行配置

int MyAgent::command(int argc, const char*const* argv) {

if(argc == 2) {

if(strcmp(argv[1], "call-my-priv-func") == 0) {

MyPrivFunc();

Return(TCL_OK);

}

}

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

}

C++对象控制命令导出至OTcl,这样就可以在tcl模拟脚本中调用MyAgent的成员函数

void MyAgent::MyPrivFunc(void) {

Tcl& tcl = Tcl::instance();

tcl.eval("puts \"Message From MyPrivFunc\"");

tcl.evalf("puts \"     my_var1 = %d\"", my_var1);

tcl.evalf("puts \"     my_var2 = %f\"", my_var2);

}

MyAgent成员函数定义,该成员函数实现打印变量my_var1my_var2的值

 

 tcl测试代码

ex-linkage.tcl

set myagent [new Agent/MyAgentOtcl]

创建新的代理MyAgent

$myagent set my_val1_otcl 2

$myagent set my_val2_otcl 3.14

对MyAgent成员变量进行配置

$myagent call-my-priv-func

调用MyAgent成员函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值